Pagini recente » Cod sursa (job #1807598) | Cod sursa (job #1570060) | Cod sursa (job #1850868) | Cod sursa (job #248034) | Cod sursa (job #580866)
Cod sursa(job #580866)
#include <stdio.h>
int n,m,i,l[10001],r[10001],u[10001],e,j,ok,cuplaj,t;
struct nod{int a; nod *next;};
nod *G[10001];
int add(int a,int b)
{
nod *nou=new nod;
nou->a=b;
nou->next=G[a];
G[a]=nou;
return 0;
}
int pair(int x)
{
if (u[x]) return 0;
u[x]=1;
nod *it=new nod;
it=G[x];
while (it)
{
if (!r[it->a])
{
l[x]=it->a;
r[it->a]=x;
return 1;
}
it=it->next;
}
it=G[x];
while (it)
{
if (pair(r[it->a]))
{
l[x]=it->a;
r[it->a]=x;
return 1;
}
it=it->next;
}
return 0;
}
int main(void)
{
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",&t,&j);
add(t,j);
}
ok=1;
while (ok)
{
ok=0;
for (i=1;i<=n;i++) u[i]=0;
for (i=1;i<=n;i++)
{
if (!l[i])
ok|=pair(i);
}
}
for (i=1;i<=n;i++)
if (l[i]>0) cuplaj++;
printf("%d\n",cuplaj);
for (i=1;i<=n;i++)
if (l[i]>0) printf("%d %d\n",i,l[i]);
return 0;
}