Pagini recente » Rating Mirea Carla-Cristina (carla3) | Cod sursa (job #2130482) | Cod sursa (job #1276695) | Cod sursa (job #1058008) | Cod sursa (job #1758544)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
#define NMAX 10005
vector < int > v[ NMAX ];
int vizt[ NMAX ],
cuPerecheA[ NMAX ],
cuPerecheB[ NMAX ];
bool realoca( int nod ){
if( vizt[ nod ] ) return 0;
vizt[ nod ] = 1;
vector < int > :: iterator it;
for( it = v[ nod ].begin(); it != v[ nod ].end(); ++it ){
if( !cuPerecheA[ *it ] ){
cuPerecheA[ *it ] = nod;
cuPerecheB[ nod ] = *it;
return 1;
}
}
for( it = v[ nod ].begin(); it != v[ nod ].end(); ++it ){
if( realoca( cuPerecheA[ *it ] ) ){
cuPerecheA[ *it ] = nod;
cuPerecheB[ nod ] = *it;
return 1;
}
}
return 0;
}
int main()
{
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
int n, m, i, j, x, y, s, d, k;
scanf("%d%d%d",&n,&m,&k);
while( k-- ){
scanf("%d%d",&x,&y);
v[ x ].push_back( y );
}
s = 0;
do{
k = 0;
memset( vizt, 0, sizeof( vizt ) );
for( i = 1; i <= n; ++i )
if( !cuPerecheB[ i ] && realoca( i ) ) s++, k = 1;
}while( k );
printf("%d\n",s);
for( i = 1; i <= n; ++i )
if( cuPerecheB[ i ] ) printf("%d %d\n",i,cuPerecheB[ i ]);
return 0;
}