Pagini recente » Cod sursa (job #2435096) | Cod sursa (job #2469987) | Borderou de evaluare (job #2581036) | Cod sursa (job #1709683) | Cod sursa (job #677120)
Cod sursa(job #677120)
#include<stdio.h>
#include<vector>
#include<string.h>
#define Nmax 10009
using namespace std;
int n1,n2,m,i,use[Nmax],j,x,y,nr,ok=1;
vector<int> a[Nmax],st(Nmax),dr(Nmax);
int cupleaza(int nod)
{
use[nod]=1;
for (vector<int>::iterator it=a[nod].begin();it!=a[nod].end();it++)
if (!dr[*it] || (!use[dr[*it]] && cupleaza(dr[*it])))
{
st[nod]=*it;
dr[*it]=nod;
return 1;
}
return 0;
}
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);
a[x].push_back(y);
}
while (ok)
{
ok=0;
memset(use,0,sizeof(use));
for (i=1;i<=n1;i++)
{
if (st[i]) continue;
if (cupleaza(i))
{
nr++;
ok=1;
}
}
}
printf("%d\n",nr);
for (i=1;i<=n1;i++)
if (st[i]) printf("%d %d\n",i,st[i]);
}