Pagini recente » Cod sursa (job #2784312) | Cod sursa (job #2440358) | Cod sursa (job #2697065) | Cod sursa (job #1812690) | Cod sursa (job #266327)
Cod sursa(job #266327)
#include <stdio.h>
#include <string.h>
#define nmax 10001
struct nod
{
int x;
nod *urm;
};
nod *A[nmax];
int l[nmax],r[nmax],use[nmax];
int pairup(int x)
{
if (use[x]) return 0;
use[x] = 1;
nod *w = A[x];
while (w!=NULL)
{
if (!l[w->x])
{
l[w->x] = x;
r[x] = w->x;
return 1;
}
w = w->urm;
}
w = A[x];
while (w!=NULL)
{
if (pairup(l[w->x]))
{
l[w->x] = x;
r[x] = w->x;
return 1;
}
w = w->urm;
}
return 0;
}
void add(int x,int y)
{
nod *urm = new nod;
urm->x = y;
urm->urm = A[x];
A[x] = urm;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int n,m,e,x,y;
scanf("%d%d%d",&n,&m,&e);
while (e)
{
e--;
scanf("%d%d",&x,&y);
add(x,y);
}
int ok=1,flux=0,i;
while (ok)
{
ok=0;
memset(use,0,sizeof(use));
for (i=1;i<=n;++i)
if (!r[i]) if (pairup(i)) flux++,ok=1;
}
printf("%d\n",flux);
for (i=1;i<=n;i++) if(r[i]) printf("%d %d\n",i,r[i]);
return 0;
}