Pagini recente » Cod sursa (job #1343107) | Cod sursa (job #3184844) | Cod sursa (job #2858296) | Cod sursa (job #1619939) | Cod sursa (job #1809918)
#include <stdio.h>
#include <vector>
#include <string.h>
#define NMAX 10010
using namespace std;
vector<int> G[NMAX];
bool done, viz[NMAX];
int L[NMAX], R[NMAX], N, M, E, i, a, b, cuplaj;
bool pairup(int n) {
if (viz[n]) {
return false;
}
viz[n] = true;
for (vector<int>::iterator it = G[n].begin(); it != G[n].end(); it++) {
if (!R[*it] || pairup(R[*it])) {
L[n] = *it;
R[*it] = n;
return true;
}
}
return false;
}
int main(int argc, char **argv)
{
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &N, &M, &E);
for (i = 1; i <= E; i++) {
scanf("%d %d", &a, &b);
G[a].push_back(b);
}
while (!done) {
done = true;
memset(viz, false, sizeof(viz));
for (i = 1; i <= N; i++) {
if (!L[i] && pairup(i)) {
cuplaj++;
done = false;
}
}
}
printf("%d\n", cuplaj);
for (i = 1; i <= N; i++) {
if (L[i]) {
printf("%d %d\n", i, L[i]);
}
}
return 0;
}