Pagini recente » Cod sursa (job #2831625) | Cod sursa (job #197927) | Cod sursa (job #81669) | Cod sursa (job #2941876) | Cod sursa (job #2116366)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
const int MaxN = 10005;
int A[MaxN], B[MaxN], n, m, e;
vector<int> gr[MaxN];
bitset<MaxN> viz;
bool dfs(int node) {
viz[node] = 1;
for (auto son: gr[node]) if (!B[son]) {
B[son] = node;
A[node] = son;
return 1;
}
for (auto son: gr[node]) if(!viz[B[son]] && dfs(B[son])) {
A[node] = son;
B[son] = node;
return 1;
}
return 0;
}
int main()
{
f >> n >> m >> e;
for (int i = 1; i <= e; ++i) {
int x, y;
f >> x >> y;
gr[x].push_back(y);
}
int add = 1, ans = 0;
while (add) {
viz.reset();
add = 0;
for (int i = 1; i <= n; ++i) if (!viz[i] && !A[i] && dfs(i)) ++add;
ans += add;
}
g << ans << '\n';
for (int i = 1; i <= n; ++i) if(A[i]) g << i << ' ' << A[i] << '\n';
return 0;
}