Pagini recente » Cod sursa (job #423942) | Cod sursa (job #2036742) | Cod sursa (job #2969444) | Rating Andronic Octavian (ando) | Cod sursa (job #235061)
Cod sursa(job #235061)
#include<stdio.h>
int l[10002];
int r[10002];
int solve;
int n;
int e;
int x;
int y;
int m;
int use[10002];
struct Nod {
int val;
Nod *next;
};
Nod *a[10002];
void insert(Nod *&q1, int q2)
{
Nod *u = new Nod;
u->val = q2;
u->next = q1;
q1 = u;
}
int PrUp(int i)
{
if (use[i])
return 0;
use[i] = 1;
for(Nod *it = a[i]; it; it = it -> next)
if (!l[it->val])
{
l[it->val] = i;
r[i] = it->val;
return 1;
}
for(Nod *it = a[i]; it; it = it -> next)
if (PrUp(l[it->val]))
{
l[it->val] = i;
r[i] = it->val;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d",&n,&m,&e);
for(int i = 1; i <= e; i++)
{
scanf("%d %d",&x,&y);
insert(a[x],y);
}
int ok = 1;
while (ok)
{
ok =0;
for(int i = 1; i <= n; i++)
use[i] = 0;
for(int i = 1; i <= n; i++)
if (!r[i])
if (PrUp(i))
ok = solve++;
}
printf("%d \n",solve);
for(int i = 1; i <= n; i++)
if (r[i])
printf("%d %d \n",i,r[i]);
return 0;
}