Pagini recente » Cod sursa (job #505915) | Cod sursa (job #2018125) | Cod sursa (job #2283421) | Cod sursa (job #2506054) | Cod sursa (job #567863)
Cod sursa(job #567863)
#include <cstdio>
#include <vector>
using namespace std;
const int N = 10005;
int n, m, e, l[N], r[N], v[N];
vector<int> a[N];
int pairup(int k) {
int i;
if(v[k])
return 0;
v[k] = 1;
for(i = 0; i < a[k].size(); ++i)
if(!r[a[k][i]]) {
l[k] = a[k][i];
r[a[k][i]] = k;
return 1;
}
for(i = 0; i < a[k].size(); ++i)
if(r[a[k][i]] && pairup(r[a[k][i]])) {
l[k] = a[k][i];
r[a[k][i]] = k;
return 1;
}
return 0;
}
int main() {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &n, &m, &e);
int x, y, i;
for(i = 1; i <= e; ++i) {
scanf("%d %d", &x, &y);
a[x].push_back(y);
}
int ok = 1;
while(ok) {
ok = 0;
memset(v, 0, sizeof(v));
for(i = 1; i <= n; ++i)
if(!l[i] && pairup(i))
ok |= 1;
}
int r = 0;
for(i = 1; i <= n; ++i)
r += (l[i] > 0);
printf("%d\n", r);
for(i = 1; i <= n; ++i)
if(l[i])
printf("%d %d\n", i, l[i]);
return 0;
}