Pagini recente » Cod sursa (job #1621933) | Cod sursa (job #2592548) | Cod sursa (job #2057986) | Cod sursa (job #1718844) | Cod sursa (job #303550)
Cod sursa(job #303550)
#include <stdio.h>
#define Nmax 10005
struct nod{
int info;
nod *next;
};
nod *p[Nmax];
int l[Nmax],r[Nmax],v[Nmax],n,m;
int cupleaza(int i)
{
if(v[i])
return 0;
v[i]=1;
for(nod *current=p[i];current;current=current->next)
if(r[current->info]==0)
{
r[current->info]= i;
l[i]=current->info;
return 1;
}
for(nod *current=p[i];current;current=current->next)
if(cupleaza(r[current->info]))
{
r[current->info]=i;
l[i]=current->info;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int x,y,t,i;
scanf("%d%d%d",&n,&m,&t);
while(t--)
{
scanf("%d%d",&x,&y);
nod *current=new nod;
current->info=y;
current->next=p[x];
p[x]=current;
}
int ok;
for(ok=1;ok;)
{
ok=0;
for(i=1;i<=n;++i)
v[i]=0;
for(i=1;i<=n;++i)
if(l[i]==0)
ok |= cupleaza(i);
}
t=0;
for(i=1;i<=n;++i)
if(l[i])
++t;
printf("%d\n",t);
for(i=1;i<=n;++i)
if(l[i])
printf("%d %d\n",i,l[i]);
return 0;
}