Pagini recente » Cod sursa (job #2214317) | Cod sursa (job #1791694) | Cod sursa (job #1231317) | Cod sursa (job #809315) | Cod sursa (job #1936314)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("cuplaj.in");
ofstream fo("cuplaj.out");
const int NMAX = 1e5 + 5;
int ant, n, m, k;
vector<int> g[NMAX];
int l[NMAX], r[NMAX];
bool f[NMAX];
bool match(int u) {
if (f[u]) return false;
f[u] = true;
for (auto v: g[u]) if (!r[v]) {
l[u] = v;
r[v] = u;
return true; }
for (auto v: g[u]) if (!f[r[v]] && match(r[v])) {
l[u] = v;
r[v] = u;
return true; }
return false; }
int main() {
bool flag;
int a, b;
fi >> n >> m >> k;
for (int i = 1; i <= k; ++i) {
fi >> a >> b;
g[a].push_back(b); }
do {
memset(f, 0x00, sizeof f);
flag = false;
for (int i = 1; i <= n; ++i)
if (!l[i] && match(i))
flag = true,
++ant; }
while (flag);
fo << ant << '\n';
for (int i = 1; i <= n; ++i)
if (l[i] != 0)
fo << i << ' ' << l[i] << '\n';
return 0; }