Pagini recente » Cod sursa (job #2827876) | Cod sursa (job #2338101) | Cod sursa (job #1417612) | Cod sursa (job #1699989) | Cod sursa (job #660250)
Cod sursa(job #660250)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
#define MAXN 10010
int use[MAXN], r[MAXN], l[MAXN];
vector<int> G[MAXN];
int pairup(int n){
if(use[n])
return 0;
use[n]=1;
vector<int>::iterator i;
for(i=G[n].begin(); i!=G[n].end(); i++)
if(!r[*i]){
l[n]=*i;
r[*i]=n;
return 1;
}
for(i=G[n].begin(); i!=G[n].end(); i++)
if(r[*i] && pairup(r[*i])){
l[n]=*i;
r[*i]=n;
return 1;
}
return 0;
}
int main(){
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
int N, M, E, i, ok, c, a, b;
scanf("%d%d%d\n", &N, &M, &E);
for(i=1; i<=E; i++){
scanf("%d%d", &a, &b);
G[a].push_back(b);
}
do {
ok=0;
memset(use, 0, sizeof(use));
for(i=1; i<=N; i++)
if(!l[i])
ok|=pairup(i);
} while(ok);
c=0;
for(i=1; i<=N; i++)
if(l[i])
c++;
printf("%d\n", c);
for(i=1; i<=N; i++)
if(l[i])
printf("%d %d\n", i, l[i]);
return 0;
}