Pagini recente » Monitorul de evaluare | Cod sursa (job #1330283) | Cod sursa (job #2005770) | Cod sursa (job #2052569) | Cod sursa (job #1268614)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
int n , m , k,i,j,x,y ;
#define N 10004
int l[N],r[N];
vector<int> v[N];
bool viz[N];
bool pairup(int q){
if( viz[q] ) return 0;
viz[q] = true;
for( vector<int> :: iterator it = v[q].begin(); it != v[q].end(); ++it )
if(!r[*it]){
l[q] = *it;
r[*it] = q;
return 1;
}
for( vector<int> :: iterator it = v[q].begin(); it != v[q].end(); ++it )
if( pairup(*it) ){
l[q] = *it;
r[*it] = q;
return 1;
}
return 0;
}
int main()
{
freopen("cuplaj.in" , "r" ,stdin );
freopen("cuplaj.out", "w" ,stdout );
scanf("%d %d %d\n", &n , &m , &k);
for(i=1;i<=k;++i){
scanf("%d %d\n",&x,&y);
v[x].push_back(y);
}
for(int ok=1; ok ; ){
ok = 0;
memset(viz,0,sizeof(viz));
for(i=1;i<=n;++i)
if( !l[i] ) ok |= pairup( i );
}
int cuplaj=0;
for(i=1;i<=n;++i)
cuplaj += ( l[i] > 0 );
printf("%d\n",cuplaj);
for(i=1;i<=n;++i)
if( l[i] )
printf("%d %d\n",i,l[i]);
return 0;
}