Pagini recente » Cod sursa (job #1743274) | Cod sursa (job #2155638) | Cod sursa (job #2366654) | Cod sursa (job #1579315) | Cod sursa (job #300319)
Cod sursa(job #300319)
#include<stdio.h>
struct nod { int v;
nod * next;
} *v[10001];
int st[10001],dr[10001],u[10001],n,e,m;
int cuplaj(int nd)
{ if(u[nd]) return 0;
u[nd]=1;
nod *p;
for(p=v[nd];p;p=p->next)
if(!st[p->v]||cuplaj(st[p->v]))
{ dr[nd]=p->v;
st[p->v]=nd;
return 1;
}
return 0;
}
int main()
{ freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int x,y,i,cont,r;
scanf("%d%d%d",&n,&m,&e);
for(i=1;i<=e;i++)
{ scanf("%d%d",&x,&y);
nod *p=new nod;
p->v=y;
p->next=v[x];
v[x]=p;
}
cont=1;
while(cont)
{ cont=0;
for(i=1;i<=n;i++)
u[i]=0;
for(i=1;i<=n;i++)
if(!dr[i]) cont|=cuplaj(i);
}
r=0;
for(i=1;i<=n;i++)
if(dr[i]) r++;
printf("%d\n",r);
for(i=1;i<=n;i++)
if(dr[i]) printf("%d %d\n",i,dr[i]);
fclose(stdin);
fclose(stdout);
return 0;
}