Pagini recente » Cod sursa (job #1395305) | Cod sursa (job #1876389) | Cod sursa (job #2882256) | Cod sursa (job #2259874) | Cod sursa (job #1751812)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 10005;
int ant, n, m, k;
vector<int> g[NMAX];
bool f[NMAX];
int l[NMAX],
r[NMAX];
bool match(int u) {
if(f[u]) return false;
f[u] = true;
for(int v: g[u]) if(!r[v]) {
r[v] = u;
l[u] = v;
return true;
}
for(int v: g[u]) if(match(r[v])) {
r[v] = u;
l[u] = v;
return true;
}
return false;
}
int main(void) {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
int x, y;
bool flag;
ant = 0;
scanf("%d%d%d", &n, &m, &k);
while(k--) {
scanf("%d%d",&x,&y);
g[x].push_back(y);
}
do {
flag = false;
memset(f, 0x00, sizeof(f));
for(int i=1; i<=n; ++i) {
if(!l[i] && match(i)) {
flag = true;
ant ++;
}
}
} while(flag);
printf("%d\n", ant);
for(int i=1; i<=n; ++i) if(l[i]) {
printf("%d %d\n", i, l[i]);
}
fclose(stdin);
fclose(stdout);
return 0;
}