Pagini recente » Cod sursa (job #2601796) | Cod sursa (job #1968349) | Cod sursa (job #584886) | Cod sursa (job #440508) | Cod sursa (job #3282678)
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e4 + 1;
vector<int> adj[nmax];
bool f[nmax];
int l[nmax];
int r[nmax];
int up(int i) {
if(f[i]) {
return 0;
}
f[i] = 1;
for(auto it : adj[i]) {
if(!r[it]) {
l[i] = it;
r[it] = i;
return 1;
}
}
for(auto it : adj[i]) {
if(up(r[it])) {
l[i] = it;
r[it] = i;
return 1;
}
}
return 0;
}
int32_t main() {
ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");
int n, m, e;
cin >> n >> m >> e;
while(e--) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
}
int ans = 0;
for(int i = 1; i <= n; i++) {
if(!l[i]) {
if(!up(i)) {
memset(f, 0, sizeof(f));
ans += up(i);
} else {
ans++;
}
}
}
cout << ans << '\n';
for(int i = 1; i <= n; i++) {
if(l[i]) {
cout << i << " " << l[i] << '\n';
}
}
return 0;
}
/*
7
1 2 5 10 11 13 14 12 9 8 7 6 4 3
5
1 2 8 9 10 7 6 5 4 3
*/