Pagini recente » Cod sursa (job #1485082) | Cod sursa (job #1013219) | Cod sursa (job #2197814) | Cod sursa (job #200335) | Cod sursa (job #1708686)
#include <cstdio>
#include <vector>
#include <bitset>
#define x first
#define y second
#define NMAX 10009
using namespace std;
int N, M, E, st[ NMAX ], dr[ NMAX ], sol;
bitset< NMAX > viz;
vector< int > G[NMAX];
int DFS(int node) {
if (viz[ node ]) {
return 0;
}
viz[ node ] = 1;
for (vector<int>::iterator it = G[node].begin(); it != G[ node ].end(); ++it) {
if (!dr[ *it ]) {
st[ node ] = *it;
dr[ *it ] = node;
return 1;
}
}
for (vector<int>::iterator it = G[node].begin(); it != G[ node ].end(); ++it) {
if ( DFS( dr[ *it ] ) ) {
st[ node ] = *it;
dr[ *it ] = node;
return 1;
}
}
return 0;
}
int main() {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d%d%d", &N, &M, &E);
while (E--) {
int x, y;
scanf("%d%d", &x, &y);
G[ x ].push_back( y );
}
bool done = 0;
while (!done) {
done = 1;
viz.reset();
for (int i = 1; i <= N; ++i) {
if (!st[ i ] && DFS( i )) {
++sol;
done = 0;
}
}
}
printf("%d\n", sol);
for (int i = 1; i <= N; ++i) {
if (st[ i ]) {
printf("%d %d\n", i, st[ i ]);
}
}
return 0;
}