Pagini recente » Cod sursa (job #2010306) | Cod sursa (job #2597072) | Cod sursa (job #1732389) | Cod sursa (job #687047) | Cod sursa (job #2238192)
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
const int MAXV = 2e4;
const int MAXN = 1e4;
const int MAXM = 1e4;
vector<int> g[MAXV + 1];
bool viz[MAXV + 1];
int cup_le[MAXM + 1], cup_ri[MAXN + 1];
int n, m, e;
bool cuplaj(int node) {
if(viz[node]) return false;
viz[node] = true;
for (auto x : g[node]) {
if(cup_le[x] == 0) {
cup_le[x] = node;
cup_ri[node] = x;
return true;
}
}
for (auto x : g[node]) {
if (cuplaj(cup_le[x])) {
cup_le[x] = node;
cup_ri[node] = x;
return true;
}
}
return false;
}
int main() {
in >> n >> m >> e;
for (int i = 1; i <= n + m; ++ i) {
int a, b;
in >> a >> b;
g[a].push_back(b);
}
bool ok = true;
while (ok == true) {
ok = false;
memset(viz, 0, sizeof viz);
for (int i = 1; i <= n; ++ i) {
if (cup_ri[i] == 0)
ok |= cuplaj(i);
}
}
int cnt = 0;
for (int i = 1; i <= n; ++ i) {
if (cup_ri[i] != 0)
++ cnt;
}
out << cnt << '\n';
for (int i = 1; i <= n; ++ i) {
if (cup_ri[i] != 0) {
out << i << ' ' << cup_ri[i] << '\n';
}
}
return 0;
}