Pagini recente » Cod sursa (job #2286477) | Cod sursa (job #70255) | Cod sursa (job #348421) | Cod sursa (job #3238585) | Cod sursa (job #2044093)
#include <iostream>
#include <vector>
#include <cstring>
#define MAXN 10005
#define MAXM 10005
using namespace std;
int n, m, nre;
int L[MAXN], R[MAXM];
vector<int> G[MAXN];
bool used[MAXN];
bool pairup(int u) {
used[u] = 1;
for (auto x: G[u]) {
if (!R[x]) {
L[u] = x;
R[x] = u;
return 1;
}
}
for (auto x: G[u]) {
if (!used[R[x]] && pairup(R[x])) {
L[u] = x;
R[x] = u;
return 1;
}
}
return 0;
}
int main() {
cin >> n >> m >> nre;
for (int i = 1; i <= nre; ++i) {
int u, v;
cin >> u >> v;
G[u].push_back(v);
}
bool done = 0;
while(!done) {
done = 1;
memset(used, 0, sizeof(used));
for (int i = 1; i <= n; ++i) {
if (!L[i] && pairup(i))
done = 0;
}
}
int sol = 0;
for (int i = 1; i <= n; ++i)
sol += (L[i] > 0);
cout << sol << "\n";
for (int i = 1; i <= n; ++i) {
if (L[i] > 0) {
cout << i << " " << L[i] << "\n";
}
}
return 0;
}