Pagini recente » Cod sursa (job #2087718) | Istoria paginii utilizator/olivia | Cod sursa (job #2577941) | Cod sursa (job #2894539) | Cod sursa (job #303039)
Cod sursa(job #303039)
#include <stdio.h>
#define Nmax 10100
struct Nod
{
int a;
Nod *x;
} *h[Nmax];
int l[Nmax], r[Nmax], v[Nmax],n,m;
int cupleaza(int nod)
{
if (v[nod] != 0)
return 0;
v[nod] = 1;
for (Nod *it=h[nod];it;it=it->x)
if (r[it->a] == 0)
{
r[it->a] = nod;
l[nod] = it->a;
return 1;
}
for (Nod *it=h[nod];it;it=it->x)
if (cupleaza(r[it->a]))
{
r[it->a] = nod;
l[nod] = it->a;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int t,x,y;
scanf("%d%d%d", &n,&m,&t);
while (t--)
{
scanf("%d%d", &x,&y);
Nod *q = new Nod;
q->a = y;
q->x = h[x];
h[x] = q;
}
for (int ok;ok;)
{
ok = 0;
for (int i=1;i<=n;++i)
v[i] = 0;
for (int i=1;i<=n;++i)
if (l[i] == 0)
ok |= cupleaza(i);
}
t = 0;
for (int i=1;i<=n;++i)
if (l[i] != 0)
++t;
printf("%d\n", t);
for (int i=1;i<=n;++i)
if (l[i] != 0)
printf("%d %d\n", i, l[i]);
return 0;
}