Pagini recente » Cod sursa (job #2830184) | Cod sursa (job #1082449) | Cod sursa (job #797116) | Cod sursa (job #2399950) | Cod sursa (job #1936317)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("cuplaj.in");
ofstream fo("cuplaj.out");
const int NMAX = 1e4 + 5;
int ant, n, m, k;
vector<short int> g[NMAX];
short int l[NMAX], r[NMAX];
bitset<NMAX> f;
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 {
flag = 0;
f.reset();
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; }