Pagini recente » Cod sursa (job #1565454) | Cod sursa (job #684056) | Cod sursa (job #2316054) | Cod sursa (job #1273289) | Cod sursa (job #287842)
Cod sursa(job #287842)
using namespace std;
#include <cstdio>
#include <vector>
#include <algorithm>
#define Nmax 10010
vector <int> V[Nmax];
int n, m, R, x, y, i, ok, nr;
int l[Nmax], r[Nmax], viz[Nmax];
int pairup(int nod){
if( viz[nod] ) return 0;
viz[nod] = 1;
vector <int>::iterator it;
for( it = V[nod].begin(); it != V[nod].end(); it++ ){
if( !r[*it] ){
l[nod] = *it;
r[*it] = nod;
return 1;
}
}
for( it = V[nod].begin(); it != V[nod].end(); it++ ){
if( pairup( r[*it] ) ){
l[nod] = *it;
r[*it] = nod;
return 1;
}
}
return 0;
}
int main(){
FILE *f = fopen("cuplaj.in", "r");
FILE *g = fopen("cuplaj.out", "w");
fscanf(f,"%d %d %d",&n,&m,&R);
for(i = 1; i <= R; i++){
fscanf(f,"%d %d",&x, &y);
V[x].push_back(y);
}
for(ok = 1; ok ; ){
ok = 0;
memset(viz, 0, sizeof(viz));
for(i = 1; i <= n; i++)
if(!l[i])
if(pairup(i))
ok = 1;
}
for(i = 1; i <= n; i++)
if( l[i] ) nr++;
fprintf(g,"%d\n",nr);
for(i = 1; i <= n; i++)
if( l[i] ) fprintf(g,"%d %d\n",i, l[i]);
fclose(f);
fclose(g);
return 0;
}