Pagini recente » Cod sursa (job #232041) | Cod sursa (job #1457326) | Cod sursa (job #3213303) | Cod sursa (job #2980707) | Cod sursa (job #444208)
Cod sursa(job #444208)
#include <stdio.h>
#include <vector>
#define MAXN 10100
using namespace std;
vector<int> G[MAXN];
bool ok[MAXN], bif;
int St[MAXN], Dr[MAXN];
int i,n1,m,n2,x,y;
bool cupleaza(int nod)
{
if (ok[nod])
return false;
ok[nod] = true;
vector<int>::iterator it;
for (it=G[nod].begin(); it!=G[nod].end(); it++)
if (!St[*it] || cupleaza(St[*it])){
St[*it] = nod;
Dr[nod] = *it;
return true;
}
return false;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n1,&n2,&m);
for (i=1; i<=m; i++){
scanf("%d %d",&x,&y);
G[x].push_back(y);
}
for (bif=true; bif; memset(ok,false,sizeof(ok)))
for (i=1, bif=false; i<=n1; i++)
if (!Dr[i])
bif |= cupleaza(i);
m = 0;
for (i=1; i<=n1; i++)
if (Dr[i])
m++;
printf("%d\n",m);
for (i=1; i<=n1; i++)
if (Dr[i])
printf("%d %d\n",i, Dr[i]);
return 0;
}