Pagini recente » Borderou de evaluare (job #508712) | Cod sursa (job #2251373) | Cod sursa (job #327757) | Cod sursa (job #2953602) | Cod sursa (job #1007382)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#define MAX_SIZE 10005
using namespace std;
ifstream in ( "cuplaj.in" );
ofstream out ( "cuplaj.out" );
vector < int > G[MAX_SIZE];
int N , M , E;
int l[MAX_SIZE], r[MAX_SIZE] , used[MAX_SIZE];
bool PairUp ( int node )
{
if( used[node] ) return 0;
used[node] = true ;
for ( vector < int > ::iterator it = G[node].begin() ; it != G[node].end() ; ++it )
if ( !l[*it] )
{
l[*it] = node ;
r[node] = *it ;
return 1 ;
}
for ( vector < int > ::iterator it = G[node].begin() ; it != G[node].end() ; ++it )
if ( PairUp(l[*it]) )
{
l[*it] = node ;
r[node] = *it ;
return 1 ;
}
return 0;
}
int main ( void )
{
int i , j, x , y ;
in >> N >> M >> E ;
for ( i = 1 ; i <= E ; ++i )
{
in >> x >> y ;
G[x].push_back(y);
}
bool ok = 1 ;
for ( ; ok ; )
{
ok = 0 ;
memset( used , 0 , sizeof(used) ) ;
for ( i = 1 ; i <= N ; ++i )
if ( !r[i] )
ok |= PairUp(i);
}
int cuplaj = 0 ;
for ( i = 1 ; i <= N ; ++i )
if ( r[i] > 0 )
++cuplaj;
out << cuplaj << "\n";
for ( i = 1 ; i <= N ; ++i )
if ( r[i] > 0 )
out << i << " "<<r[i] << "\n" ;
in.close();
out.close();
return 0;
}