Pagini recente » Cod sursa (job #2808640) | Cod sursa (job #2023346) | Profil usureluflorian | Cod sursa (job #2060946) | Cod sursa (job #2637543)
#include <bits/stdc++.h>
#define N 10000
using namespace std;
vector <int> G[N+1];
array <int, N+1> u, l, r;
int pairup (int n) {
if (u[n])
return 0;
u[n] = 1;
for (auto it: G[n])
if (!r[it]) {
l[n] = it;
r[it] = n;
return 1;
}
for (auto it: G[n])
if (pairup(r[it])) {
l[n] = it;
r[it] = n;
return 1;
}
return 0;
}
int main () {
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");
int n, m, ct;
fin >> n >> m >> ct;
int i, j;
for (; ct; --ct) {
fin >> i >> j;
G[i].push_back(j);
}
int change = -1;
while (change) {
change = 0;
u.fill(0);
for (i=1; i<=n; ++i)
if (!l[i])
change |= pairup(i);
}
int ans = 0;
for (i=1; i<=n; ++i)
if (l[i])
++ans;
fout << ans << '\n';
for (i=1; i<=n; ++i)
if (l[i])
fout << i << ' ' << l[i] << '\n';
return 0;
}