Pagini recente » Cod sursa (job #234497) | Statistici Bratu George Florin 313CA (george_florin) | Cod sursa (job #2193186) | Cod sursa (job #21120) | Cod sursa (job #580929)
Cod sursa(job #580929)
#include <cstdio>
#include <vector>
#include <bitset>
using namespace std;
const int MAX_N = 10001;
int n, m, e;
vector<int> G[MAX_N];
bitset<MAX_N> used;
int r[MAX_N], l[MAX_N];
int pair_up ( int k ) {
if (used[k])
return 0;
for (int i = 0; i < G[k].size(); ++i) {
if (!l[G[k][i]]) {
l[G[k][i]] = k;
r[k] = G[k][i];
return 1;
}
}
for (int i = 0; i < G[k].size(); ++i) {
if (l[G[k][i]] != k && pair_up(l[G[k][i]])) {
l[G[k][i]] = k;
r[k] = G[k][i];
return 1;
}
}
return 0;
}
int main() {
freopen("cuplaj.in","rt",stdin);
freopen("cuplaj.out","wt",stdout);
scanf("%d %d %d",&n,&m,&e);
for (int i = 0, a, b; i < e; ++i) {
scanf("%d %d",&a,&b);
G[a].push_back(b);
}
int ans = 0;
for (bool ok = true; ok; ) {
ok = false;
used = 0;
for (int i = 1; i <= n; ++i) {
if (!r[i] && pair_up(i)) {
++ans;
ok = true;
}
}
}
printf("%d\n",ans);
for (int i = 1; i <= n; ++i)
if (r[i])
printf("%d %d\n",i,r[i]);
return 0;
}