Pagini recente » Cod sursa (job #1687600) | Cod sursa (job #1130271) | Cod sursa (job #1537548) | Cod sursa (job #712175) | Cod sursa (job #1493079)
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
int N, M, E, L[10005], R[10005];
vector < vector <int> > V;
bool solved[10005];
void read() {
scanf("%d %d %d", &N, &M, &E);
V.resize(N+1);
for (int i = 0; i < E; ++i) {
int x, y;
scanf ("%d %d", &x, &y);
V[x].push_back(y);
}
}
bool pairUp (int x) {
if (solved[x]) return 0;
solved[x] = true;
vector <int>::iterator it;
for (it = V[x].begin(); it != V[x].end(); ++it) {
if (!R[*it] || pairUp(R[*it])) {
R[*it] = x;
L[x] = *it;
return 1;
}
}
return 0;
}
int solve () {
int c = 0;
bool still = true;
while (still) {
still = false;
memset(solved, false, (N+1) * sizeof(bool));
for (int i = 1; i <= N; ++i) {
if (R[i] == 0) {
if (pairUp(i)) {
++c;
still = true;
}
}
}
}
return c;
}
int main (void) {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
read();
int max = solve();
printf("%d\n", max);
for (int i = 1, j = 0; i <= N && j < max; ++i) {
if (L[i]) {
printf("%d %d\n", i, L[i]);
++j;
}
}
return 0;
}