Pagini recente » Cod sursa (job #2817821) | Cod sursa (job #3193015) | Cod sursa (job #639828) | Cod sursa (job #2275195) | Cod sursa (job #1985431)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int N, M, x, y, paired, st[NMAX], dr[NMAX], ok = 1, edges;
vector < int > G[NMAX];
bitset < NMAX > viz;
int pair_up(int node) {
if (viz[node]) {
return 0;
}
viz[node] = 1;
for (auto it : G[node]) {
if (!dr[it]) {
dr[it] = node;
st[node] = it;
return 1;
}
}
for (auto it : G[node]) {
if (dr[it] && pair_up(dr[it])) {
dr[it] = node;
st[node] = it;
return 1;
}
}
return 0;
}
int main() {
f >> N >> M >> edges;
for (int i = 1; i <= edges; ++i) {
f >> x >> y;
G[x].push_back(y);
}
while (ok) {
ok = 0; viz.reset();
for (int i = 1; i <= N; ++i) {
if (!st[i] && pair_up(i)) {
++paired;
ok = 1;
}
}
}
g << paired << '\n';
for (int i = 1; i <= N; ++i) {
if (st[i]) {
g << i << ' ' << st[i] << '\n';
}
}
return 0;
}