Pagini recente » Cod sursa (job #3186262) | Cod sursa (job #1103997) | Cod sursa (job #838571) | Cod sursa (job #2076578) | Cod sursa (job #1258644)
# include <cstdio>
# include <vector>
# include <cstring>
# define N 10000
# define pb push_back
using namespace std;
vector <int> G[N];
vector <int> :: iterator it;
int N1,N2,nr,NR;
int U[N],st[N],dr[N];
int x,y,i;
int cupleaza(int nod)
{
int i,I;
if(U[nod]) return 0;
U[nod]=1;
for(i=0; i<G[nod].size(); ++i)
{
I=G[nod][i];
if(!dr[I] || cupleaza(dr[I]))
{
st[nod]=I;
dr[I]=nod;
return 1;
}
}
return 0;
}
void cuplaj()
{
int i;
bool ok=true;
while(ok)
{
ok=false;
memset(U, 0, sizeof(U));
for(i=1; i<=N1; ++i)
if(!st[i]) if(cupleaza(i))
{
ok=true;
NR++;
}
}
return;
}
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d\n", &N1, &N2, &nr);
while(nr--)
{
scanf("%d %d\n", &x, &y);
G[x].pb(y);
}
cuplaj();
printf("%d\n", NR);
for(i=1; i<=N1; ++i)
if(st[i]) printf("%d %d\n", i, st[i]);
return 0;
}