Pagini recente » Cod sursa (job #1164604) | Cod sursa (job #2564808) | Cod sursa (job #2663175) | Cod sursa (job #1117196) | Cod sursa (job #1446360)
#include<stdio.h>
#include<string.h>
#include<vector>
#define NMAX 10007
#define FORIT(it, v) for(vector<int>::iterator it = (v).begin(); it != (v).end(); ++ it)
using namespace std;
vector<int> v[NMAX];
int Dr[NMAX], St[NMAX], Viz[NMAX];
int n, m, e, x, y;
int cuplaj(int Nod){
if(Viz[Nod] == 1)
return 0;
Viz[Nod] = 1;
FORIT(it, v[Nod])
if(! Dr[*it]){
St[Nod] = *it;
Dr[*it] = Nod;
return 1;
}
FORIT(it, v[Nod])
if(cuplaj(Dr[*it])){
St[Nod] = *it;
Dr[*it] = Nod;
return 1;
}
return 0;
}
int main(){
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &n, &m, &e);
for(int i = 1; i <= e; ++ i){
scanf("%d %d", &x, &y);
v[x].push_back(y);
}
int cont = 1;
while(cont){
cont = 0;
memset(Viz, 0, sizeof(Viz));
for(int i = 1; i <= n; ++ i)
if(! St[i] && cuplaj(i))
cont = 1;
}
int cup = 0;
for(int i = 1; i <= n; ++ i)
if(St[i])
++ cup;
printf("%d\n", cup);
for(int i = 1; i <= n; ++ i)
if(St[i])
printf("%d %d\n", i, St[i]);
return 0;
}