Pagini recente » Cod sursa (job #2756481) | Cod sursa (job #2963476) | Cod sursa (job #1113066) | Cod sursa (job #306037) | Cod sursa (job #3041438)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using VI = vector<int>;
using pii = pair<int,int>;
#define mp make_pair
#define eb emplace_back
const string TASK("cuplaj");
ifstream fin(TASK + ".in");
ofstream fout(TASK + ".out");
const int N = 1e5 + 5;
VI g[N]; int n, m, idk;
int l[N], r[N];
bitset<N> vis;
bool match(int u) {
if (vis[u]) return 0;
vis[u] = 1;
for (auto v : g[u])
if (!r[v]) {
r[v] = u;
l[u] = v;
return 1;
}
for (auto v : g[u]) {
if (match(r[v])) {
r[v] = u;
l[u] = v;
return 1;
}
}
return 0;
}
int main() {
fin >> n >> idk >> m;
for (int u, v, i = 1; i <= m; ++i) {
fin >> u >> v;
g[u].eb(v);
}
bool ok = 1;
while (ok) {
vis.reset();
ok = 0;
for (int i = 1; i <= n; ++i)
if (!l[i]) ok|= match(i);
}
int ans = 0;
for (int i = 1; i <= n; ++i)
if (l[i]) ++ans;
fout << ans << '\n';
for (int i = 1; i <= n; ++i)
if (l[i]) fout << i << ' ' << l[i] << '\n';
}