Pagini recente » Cod sursa (job #2286253) | Cod sursa (job #1691337) | Cod sursa (job #2899869) | Cod sursa (job #2095566) | Cod sursa (job #1549348)
#include <cstring>
#include <cstdio>
#include <vector>
#define NMAX 10005
using namespace std;
vector <vector <int>> v;
int a , b , m , node1 , node2 , c;
int r[NMAX] , viz[NMAX];
int pair_up(int node);
int main() {
freopen("cuplaj.in" , "r" , stdin);
freopen("cuplaj.out" , "w" , stdout);
scanf("%d %d %d" , &a , &b , &m);
v.resize(a + 5);
for(int i = 1 ; i <= m ; ++i) {
scanf("%d %d" , &node1 , &node2);
v[node1].push_back(node2);
}
for(int i = 1 ; i <= a ; ++i) {
memset(viz , 0 , sizeof(viz));
c += pair_up(i);
}
printf("%d\n" , c);
memset(viz , 0 , sizeof(viz));
for(int i = 1 ; i <= b ; ++i) {
if(r[i] != 0) {
viz[r[i]] = i;
}
}
for(int i = 1 ; i <= a ; ++i) {
if(viz[i] != 0) {
printf("%d %d\n" , i , viz[i]);
}
}
return 0;
}
int pair_up(int node) {
if(viz[node]) {
return 0;
}
viz[node] = 1;
for(vector <int> :: iterator it = v[node].begin() ; it != v[node].end() ; ++it) {
int p = *it;
if(r[p] == 0 || pair_up(r[p])) {
r[*it] = node;
return 1;
}
}
return 0;
}