Pagini recente » Cod sursa (job #3230258) | Cod sursa (job #2592152) | Cod sursa (job #1607220) | Cod sursa (job #2959729) | Cod sursa (job #1415105)
#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct lista
{
int info;
lista * next;
} * nod;
nod a[10111];
int rr[10001],l[10001],i,j,k,m,u,n,n1;
void add(int x, nod & p)
{
nod r=new lista;
r->info=x;
r->next=p;
p=r;
}
bool viz[10012];
bool cuplaj(int x)
{
if (viz[x]) return false;
viz[x]=1;
nod r=a[x];
while (r)
{
if (!rr[r->info] || cuplaj(rr[r->info]))
{
rr[r->info]=x;
l[x]=r->info;
return true;
}
r=r->next;
}
return false;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d%d%d",&n,&n1,&m);
for (i=1; i<=m; ++i)
{
int x,y;
scanf("%d%d",&x,&y);
add(y,a[x]);
}
bool ok=true;
while (ok)
{
ok=false;
for (i=1; i<=n; ++i) viz[i]=0;
for (i=1; i<=n; ++i)
if(!l[i]) ok+=cuplaj(i);
}
int nr=0;
for (i=1; i<=n; ++i)
if (l[i]) ++nr;
printf("%d\n",nr);
for (i=1; i<=n; ++i)
if (l[i]) printf("%d %d\n",i,l[i]);
return 0;
}