Pagini recente » Cod sursa (job #2042949) | Cod sursa (job #1334729) | Cod sursa (job #1820853) | Cod sursa (job #2282790) | Cod sursa (job #394495)
Cod sursa(job #394495)
#include<stdio.h>
int v[10100],ver[100100],leg[100100],start[10100],s[10100],d[10100];
int match(int nod)
{
if(v[nod])
return 0;
v[nod]=1;
int t=start[nod];
while(t)
{
if(!d[ver[t]]||match(d[ver[t]]))
{
s[nod]=ver[t];
d[ver[t]]=nod;
return 1;
}
t=leg[t];
}
return 0;
}
int main()
{
int e,n,m,x,y,ok,c=0,i,q=0;
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&e);
while(e--)
{
scanf("%d %d",&x,&y);
ver[++q]=y;
leg[q]=start[x];
start[x]=q;
}
ok=1;
while(ok)
{
for(i=1;i<=n;i++)
v[i]=0;
ok=0;
for(i=1;i<=n;i++)
if(!s[i])
if(match(i))
{
c++;
ok=1;
}
}
printf("%d\n",c);
for(i=1;i<=n;i++)
if(s[i])
printf("%d %d\n",i,s[i]);
return 0;
}