Pagini recente » Cod sursa (job #2432631) | Cod sursa (job #1361510) | Cod sursa (job #453426) | Cod sursa (job #937127) | Cod sursa (job #360826)
Cod sursa(job #360826)
#include <algorithm>
#include <vector>
using namespace std;
#define DIM ( 1<<14 )
#define pb push_back
#define sz size()
int cuplaj;
int N, M, E;
int dr[ DIM ], st[ DIM ], viz[ DIM ];
vector< int > vec[ DIM ];
void init_viz() {
int i;
for( i = 1; i <= N; ++i )
viz[ i ] = 0;
}
int pairup( int nod ) {
unsigned int I;
if( viz[ nod ] )
return 0;
viz[ nod ] = 1;
for( I = 0; I < vec[ nod ].sz; ++I )
if( !dr[ vec[ nod ][ I ] ] ) {
dr[ vec[ nod ][ I ] ] = nod;
st[ nod ] = vec[ nod ][ I ];
return 1;
}
for( I = 0; I < vec[ nod ].sz; ++I )
if( pairup( dr[ vec[ nod ][ I ] ] ) ) {
dr[ vec[ nod ][ I ] ] = nod;
st[ nod ] = vec[ nod ][ I ];
return 1;
}
return 0;
}
int main() {
freopen( "cuplaj.in", "r", stdin );
freopen( "cuplaj.out", "w", stdout );
int i, ok, x0, y0;
scanf( "%d %d %d", &N, &M, &E );
for( i = 0; i < E; ++i ) {
scanf( "%d %d", &x0, &y0 );
vec[ x0 ].pb( y0 );
}
for( ok = 1; ok; ) {
ok = 0;
init_viz();
for( i = 1; i <= N; ++i )
if( !st[ i ] && pairup( i ) ) {
++cuplaj;
ok = 1;
}
}
printf( "%d\n", cuplaj );
for( i = 1; i <= N; ++i )
if( st[ i ] )
printf( "%d %d\n", i, st[ i ] );
return 0;
}