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