Pagini recente » Cod sursa (job #2321614) | Cod sursa (job #2888372) | Cod sursa (job #1450160) | Cod sursa (job #3281652) | Cod sursa (job #241176)
Cod sursa(job #241176)
#include <cstdio>
#include <string>
#define N 10001
struct nod
{
int x;
nod *n;
}*a[N];
int n,m,E;
int l[N], r[N];
bool use[N];
void add(int i, int j)
{
nod *p=new nod;
p->x=j;
p->n=a[i];
a[i]=p;
}
void citire()
{
scanf("%d %d %d\n",&n,&m,&E);
int p, q;
while(E--)
{
scanf("%d %d\n",&p,&q);
add(p,q);
}
}
bool rez(int n)
{
if(use[n])
return 0;
use[n]=1;
nod *i;
for(i=a[n]; i; i=i->n)
if(!l[i->x])
{
l[i->x]=n;
r[n]=i->x;
return 1;
}
for(i=a[n];i;i=i->n)
if(rez(l[i->x]))
{
l[i->x]=n;
r[n]=i->x;
return 1;
}
return 0;
}
void solve()
{
int num=0,ok=1;
while(ok)
{
ok=0;
memset(use,0,sizeof(use));
for(int i=1;i<=n;++i)
if(!r[i])
if(rez(i))
{
num++;
ok=1;
}
}
printf("%d\n", num);
for(int i=1;i<=n;++i)
if(r[i])
printf("%d %d\n",i,r[i]);
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
citire();
solve();
return 0;
}