Pagini recente » Cod sursa (job #1075239) | Cod sursa (job #2967573) | Cod sursa (job #1100432) | Cod sursa (job #637582) | Cod sursa (job #348751)
Cod sursa(job #348751)
#include <stdio.h>
struct nod
{
int nr;
nod *adr;
};
nod *v[10005],*u;
int n,m,e,i,a,b,k,s[10005],st[10005],dr[10005],nr;
int pairup(int p)
{
nod *j;
if (s[p]==0)
{
s[p]=1;
for (j=v[p];j!=NULL;j=j->adr)
if (dr[j->nr]==0)
{
st[p]=j->nr;
dr[j->nr]=p;
return 1;
}
for (j=v[p];j!=NULL;j=j->adr)
if (pairup(dr[j->nr])==1)
{
st[p]=j->nr;
dr[j->nr]=p;
return 1;
}
return 0;
}
else
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&e);
for (i=1;i<=e;++i)
{
scanf("%d %d",&a,&b);
if (v[a]==NULL)
{
v[a]=new nod;
v[a]->nr=b;
v[a]->adr=NULL;
}
else
{
u=new nod;
u->nr=b;
u->adr=v[a];
v[a]=u;
}
}
do
{
k=1;
for (i=1;i<=n;++i)
s[i]=0;
for (i=1;i<=n;++i)
if (st[i]==0)
if (pairup(i))
k=0;
}
while (k==0);
nr=0;
for (i=1;i<=n;++i)
if (st[i])
++nr;
printf("%d\n",nr);
for (i=1;i<=n;++i)
if (st[i])
printf("%d %d\n",i,st[i]);
return 0;
}