Pagini recente » Cod sursa (job #2126995) | Cod sursa (job #610632) | Cod sursa (job #1320475) | Cod sursa (job #1123287) | Cod sursa (job #1396361)
#include<stdio.h>
using namespace std;
typedef struct lista
{
int info;
lista *next;
} * nod;
int i,j,k,m,n,u,e;
bool viz[10002];
int left[10002],right[10002];
nod a[10002];
void add(int x, nod &p)
{
nod r=new lista;
r->info=x;
r->next=p;
p=r;
}
bool hopcraft(int x)
{
nod r=a[x];
if (viz[x]) return false;
viz[x]=1;
while (r)
{
if (!right[r->info] || hopcraft(right[r->info]))
{
right[r->info]=x;
left[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,&m,&e);
while (e--)
{
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 (!left[i]) ok+=hopcraft(i);
}
int sol=0;
for (i=1; i<=n; ++i)
if (left[i]) ++sol;
printf("%d\n",sol);
for (i=1; i<=n; ++i)
if (left[i]) printf("%d %d\n",i,left[i]);
return 0;
}