Pagini recente » Cod sursa (job #273848) | Cod sursa (job #2287377) | Cod sursa (job #2438548) | Cod sursa (job #3030846) | Cod sursa (job #663740)
Cod sursa(job #663740)
#include <stdio.h>
#include <string.h>
#define DIM 10010
struct nod {
int inf;
nod *adr;
};
int L[DIM], R[DIM], U[DIM], N, i, A, B, C, x, y, rez, gata;
nod *V[DIM], *q;
int cupleaza (int i) {
if (U[i] == 1)
return 0;
U[i] = 1;
for (nod *q = V[i];q!=NULL;q = q -> adr) {
if (R[q->inf] == 0) {
L[i] = q->inf;
R[q->inf] = i;
return 1;
}
}
for (nod *q = V[i];q!=NULL;q = q -> adr) {
if (cupleaza(R[q->inf])) {
L[i] = q->inf;
R[q->inf] = i;
return 1;
}
}
return 0;
}
int main() {
FILE *f = fopen("cuplaj.in","r");
FILE *g = fopen("cuplaj.out","w");
fscanf(f,"%d %d %d",&A, &B, &C);
for (i=1;i<=C;i++) {
fscanf(f,"%d %d",&x, &y);
q = new nod;
q->inf = y;
q->adr = V[x];
V[x] = q;
}
do {
gata = 1;
memset(U, 0, sizeof(U));
for (i=1;i<=A;i++)
if (L[i] == 0 && cupleaza(i)) {
gata = 0;
}
} while (! gata);
for (i=1;i<=A;i++)
if (L[i] != 0)
rez++;
fprintf(g,"%d\n",rez);
for (i=1;i<=A;i++)
if (L[i])
fprintf(g,"%d %d\n",i,L[i]);
return 0;
}