Pagini recente » Cod sursa (job #503875) | Cod sursa (job #1244181) | Cod sursa (job #1533698) | Cod sursa (job #1388131) | Cod sursa (job #1549397)
#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] , l[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);
}
bool flag = true;
while(flag) {
flag = false;
memset(viz , 0 , sizeof(viz));
for(int i = 1 ; i <= a ; ++i) {
if(l[i] == 0 && pair_up(i)) {
++c;
flag = true;
}
}
}
printf("%d\n" , c);
for(int i = 1 ; i <= a ; ++i) {
if(l[i] != 0)
printf("%d %d\n" , i , l[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])) {
l[node] = *it;
r[*it] = node;
return 1;
}
}
return 0;
}