Pagini recente » Cod sursa (job #70409) | Cod sursa (job #212670) | Cod sursa (job #113146) | Cod sursa (job #620298) | Cod sursa (job #615610)
Cod sursa(job #615610)
#include <bitset>
#include <vector>
#include <fstream>
#include <cstdlib>
#include <iterator>
#include <algorithm>
#define N_MAX 10011
using namespace std;
bitset< N_MAX > was;
int L[N_MAX], R[N_MAX];
vector< int > G[N_MAX];
inline bool PairUp( int i )
{
if( was.test(i) )
return false;
was.set(i);
vector< int >::const_iterator it=G[i].begin(), iend=G[i].end();
for( ; it < iend; ++it )
if( !R[*it] || PairUp(R[*it]) )
{
R[*it]=i;
L[i]=*it;
return true;
}
return false;
}
int main( void )
{
bool ok;
int N, M, E, x, y, i, matchSize=0;
ifstream in( "cuplaj.in" );
for( in>>N>>M>>E; E; --E )
{
in>>x>>y;
G[x].push_back( y );
}
do
{
ok=false;
for( i=1; i <= N; ++i )
if( !L[i] && PairUp(i) )
++matchSize, ok=true;
was&=0;
}while( ok );
ofstream out( "cuplaj.out" );
out<<matchSize<<'\n';
for( i=1; i <= N; ++i )
if( L[i] )
out<<i<<' '<<L[i]<<'\n';
return EXIT_SUCCESS;
}