Pagini recente » Cod sursa (job #1747450) | Cod sursa (job #2773438) | Cod sursa (job #2110518) | Cod sursa (job #1476900) | Cod sursa (job #431510)
Cod sursa(job #431510)
#include<stdio.h>
#include<string.h>
#define Nmax 10010
#define Mmax 10010
int l[Nmax],r[Nmax],viz[Nmax],n,m,e;
struct nod
{
int inf;
nod *urm;
}*a[Mmax];
int cuplaj(int c)
{
if(viz[c]) return 0;
viz[c]=1;
nod *p;
for(p=a[c];p!=NULL;p=p->urm)
if(r[p->inf]==0)
{ l[c]=p->inf;
r[p->inf]=c;
return 1;
}
for(p=a[c];p!=NULL;p=p->urm)
if(cuplaj(r[p->inf]))
{
l[c]=p->inf;
r[p->inf]=c;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&e);
int x,y,i;
nod *p;
for(i=1;i<=e;i++)
{
scanf("%d %d",&x,&y);
p=new nod;
p->inf=y;
p->urm=a[x];
a[x]=p;
}
int ok=1;
while(ok)
{
ok=0;
memset(viz,0,sizeof(viz));
for(i=1;i<=n;i++)
if(!l[i])
ok|=cuplaj(i);
}
int nr=0;
for(i=1;i<=n;i++)
nr+=(l[i]>0);
printf("%d\n",nr);
for(i=1;i<=n;i++)
if(l[i])
printf("%d %d\n",i,l[i]);
return 0;
}