Pagini recente » Florian Marcu | Cod sursa (job #346375) | Rating Zob Alexandru Mihai (zoaba) | Rating duongtranduyanh (duongtranduyanh) | Cod sursa (job #559056)
Cod sursa(job #559056)
#include <stdio.h>
#define N 10000
int h[20001];
int s[20001];
typedef struct nod {
int vf;
nod* next;
} NOD, *PNOD;
PNOD l[20001];
int e, g, m;
int i, j, k, rez;
void Add(int i, int j);
int DFM(int nod);
int main()
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &e, &g, &m);
for ( i = 1; i <= e; i++ ) h[i] = -1;
for ( i = 1; i <= g; i++ ) h[i+N] = -1;
for ( k = 1; k <= m; k++ )
scanf("%d %d", &i, &j),
Add(i, j+N);
k = 0;
for ( i = 1; i <= e; i++ )
{
if ( h[i] == -1 )
k++,
rez += DFM(i);
}
printf("%d\n", rez);
for ( i = 1; i <= e; i++ )
if ( h[i] != -1 )
printf("%d %d\n", i, h[i]-N);
return 0;
}
void Add(int i, int j)
{
PNOD q = new NOD;
q->vf = j;
q->next = l[i];
l[i] = q;
}
int DFM(int nod)
{
if ( s[nod] == k ) return 0;
s[nod] = k;
for ( PNOD q = l[nod]; q; q = q->next )
if ( h[q->vf] == -1 )
{
h[q->vf] = nod;
h[nod] = q->vf;
return 1;
}
for ( PNOD q = l[nod]; q; q = q->next )
if ( s[q->vf] != k )
{
s[q->vf] = k;
if ( DFM(h[q->vf]) )
{
h[q->vf] = nod;
h[nod] = q->vf;
return 1;
}
}
return 0;
}