Pagini recente » Cod sursa (job #2363637) | Cod sursa (job #2020335) | Cod sursa (job #1356668) | Cod sursa (job #2672880) | Cod sursa (job #1549351)
#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] ;
bool viz[NMAX];
bool 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);
for(int i = 1 ; i <= b ; ++i) {
if(r[i] != 0)
printf("%d %d\n" , r[i] , i);
}
return 0;
}
bool 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;
}