Pagini recente » Cod sursa (job #1118405) | Cod sursa (job #83104) | Cod sursa (job #2867176) | Cod sursa (job #2053187) | Cod sursa (job #280643)
Cod sursa(job #280643)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 10005
int *G[MAXN];
int st[MAXN], dr[MAXN], u[MAXN];
int cupleaza(const int x)
{ int i;
if (u[x]) return 0;
u[x] = 1;
for (i=1;i<=G[x][0];i++)
if (!dr[G[x][i]])
{
st[x] = G[x][i];
dr[G[x][i]] = x;
return 1;
}
for (i=1;i<=G[x][0];i++)
if (cupleaza(dr[G[x][i]]))
{
st[x] =G[x][i];
dr[G[x][i]] =x;
return 1;
}
return 0;
}
int main(void)
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
int n, m, e,i;
scanf("%d %d %d", &n, &m, &e);
for (i=1;i<=n;i++)
{
G[i]=(int*) realloc(G[i],sizeof(int));
G[i][0]=0;
}
while (e--)
{
int x, y;
scanf("%d %d", &x, &y);
G[x][0]++;
G[x]=(int*) realloc(G[x],(G[x][0]+1)*sizeof(int));
G[x][G[x][0]]=y;
}
int change=1;
while (change)
{
change = 0;
memset(u, 0, sizeof(u));
for (i=1;i<=n;i++)
if (!st[i])
change |= cupleaza(i);
}
int cuplaj = 0;
for (i=1; i<=n;i++)
cuplaj += (st[i] > 0);
printf("%d\n", cuplaj);
for (i=1; i<=n;i++)
if (st[i] > 0)
printf("%d %d\n", i, st[i]);
return 0;
}