Pagini recente » Cod sursa (job #2056129) | Cod sursa (job #1667054) | Cod sursa (job #2960263) | Monitorul de evaluare | Cod sursa (job #360814)
Cod sursa(job #360814)
#include <stdio.h>
#define DIM 10005
struct nod {int x;
nod *urm;} *lst[DIM];
int l[DIM],r[DIM],viz[DIM];
int n,m,e,cuplaj;
void add (nod *&q,int val)
{
nod *p=new nod;
p->x=val;
p->urm=q;
q=p;
}
void read ()
{
int i,x,y;
scanf ("%d%d%d",&n,&m,&e);
for (i=1; i<=e; ++i)
{
scanf ("%d%d",&x,&y);
add (lst[x],y);
}
}
int pairup (int start)
{
nod *p;
if (viz[start])
return 0;
viz[start]=1;
for (p=lst[start]; p; p=p->urm)
if (!r[p->x])
{
r[p->x]=start;
l[start]=p->x;
return 1;
}
for (p=lst[start]; p; p=p->urm)
if (pairup (r[p->x]))
{
l[start]=p->x;
r[p->x]=start;
return 1;
}
return 0;
}
void solve ()
{
int i,ok;
do
{
ok=0;
for (i=0; i<DIM; ++i)
viz[i]=0;
for (i=1; i<=n; ++i)
if (!l[i] && pairup (i))
{
++cuplaj;
ok=1;
}
}
while (ok);
}
void print ()
{
int i;
printf ("%d\n",cuplaj);
for (i=1; i<=n; ++i)
if (l[i])
printf ("%d %d\n",i,l[i]);
}
int main ()
{
freopen ("cuplaj.in","r",stdin);
freopen ("cuplaj.out","w",stdout);
read ();
solve ();
print ();
return 0;
}