Pagini recente » Cod sursa (job #1638025) | Cod sursa (job #3167155) | Cod sursa (job #2034515) | Cod sursa (job #523799) | Cod sursa (job #233777)
Cod sursa(job #233777)
#include <stdio.h>
struct nod {int x;nod *urm;};
nod *A[10001];
int l[10001],r[10001];
bool use[10001];
void add(int x,int y)
{
nod *urm;
urm = new nod;
urm->x = y;
urm->urm = A[x];
A[x] = urm;
}
int pairup(int x)
{
if (use[x]) return 0;
use[x]=1;
nod *w;
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;
}
return 0;
}
}
int main()
{
FILE *in = fopen("cuplaj.in","r");
FILE *out = fopen("cuplaj.out","w");
int n,m,e,x,y;
fscanf(in,"%d%d%d",&n,&m,&e);
while (e)
{
e--;
fscanf(in,"%d%d",&x,&y);
add(x,y);
}
int flux=0,ok=1,i;
while (ok)
{
ok=0;
for (i=1;i<=n;i++) use[i] = 0;
for (i=1;i<=n;i++)
if (!r[i]) if (pairup(i)) flux++,ok=1;
}
fprintf(out,"%d\n",flux);
for (i=1;i<=n;i++) if (r[i]) fprintf(out,"%d %d\n",i,r[i]);
}