Pagini recente » Cod sursa (job #2683368) | Cod sursa (job #1792776) | Monitorul de evaluare | Cod sursa (job #362992) | Cod sursa (job #2209086)
#include <bits/stdc++.h>
#define N 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out") ;
int a , b , n ,sol;
vector<int> graf[N] ;
bool verif[N] ;
int left1[N],right1[N] ;
void citire()
{
int x , y , i ;
fin >> a >> b >> n ;
for ( i = 1 ; i <= n ; i++ )
{
fin >> x >> y ;
graf[x].push_back(y) ;
}
}
bool cuplaj(int nod)
{
if ( verif[nod] == true )
return false;
verif[nod] = true ;
for ( auto vecin:graf[nod] )
{
if ( right1[vecin] == 0 )
{
left1[nod] = vecin;
right1[vecin] = nod ;
sol++;
return true ;
}
}
for ( auto vecin:graf[nod] )
{
if ( cuplaj(right1[vecin]) == 1 )
{
left1[nod] = vecin ;
right1[vecin] = nod ;
return true ;
}
}
return false;
}
int main()
{
bool ok=false;
citire() ;
do
{
ok = false;
memset(verif,false,sizeof(verif));
for ( int i = 1 ; i <= n ; i++ )
if ( left1[i] == 0 )
ok = ok |cuplaj(i) ;
} while ( ok == true ) ;
fout << sol << '\n' ;
for ( int i = 1 ; i <= a ; i++ )
{
if ( left1[i] != 0 )
fout << i << " " << left1[i] << '\n' ;
}
}