Pagini recente » Cod sursa (job #1266938) | Cod sursa (job #3261857) | Cod sursa (job #3154272) | Cod sursa (job #1941141) | Cod sursa (job #2694707)
// ia - Cuplaj maxim in graf bipartit
#include <fstream>
#include <vector>
using namespace std;
const int MAX_N = 1e4 + 5;
int n, m, e, l[MAX_N], r[MAX_N], matched;
vector<int> graph[MAX_N];
bool visited[MAX_N];
bool dfs(int node) {
if (visited[node]) {
return false;
}
visited[node] = 1;
for (int nei : graph[node]) {
if (!r[nei] || dfs(r[nei])) {
l[node] = nei;
r[nei] = node;
return true;
}
}
return false;
}
int main() {
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
cin >> n >> m >> e;
while (e--) {
int u, v;
cin >> u >> v;
graph[u].push_back(v);
}
bool found_pair = true;
while (found_pair) {
found_pair = false;
for (int i = 1; i <= n; ++i) {
visited[i] = 0;
}
for (int i = 1; i <= n; ++i) {
if (!l[i] && dfs(i)) {
found_pair = true;
matched++;
}
}
}
cout << matched << '\n';
for (int i = 1; i <= n; ++i) {
if (l[i]) {
cout << i << ' ' << l[i] << '\n';
}
}
return 0;
}