Pagini recente » Cod sursa (job #46571) | Cod sursa (job #3263202) | Cod sursa (job #2433225) | Cod sursa (job #3208224) | Cod sursa (job #2828678)
#include <iostream>
#include <fstream>
#include <vector>
#define pb push_back
#define nl '\n'
#define mp make_pair
#define fi first
#define se second
using namespace std;
ifstream f ( "cuplaj.in" );
ofstream g ( "cuplaj.out" );
const int NMAX = 10002;
bool viz[NMAX];
vector<int>G[NMAX];
int l[NMAX], r[NMAX];
bool pairup ( int x )
{
//cout<<x<<nl;
if ( viz[x] )
return 0;
viz[x] = 1;
for ( auto i : G[x] )
if ( r[i] == 0 )
{
r[i] = x;
l[x] = i;
return 1;
}
for ( auto i : G[x] )
if ( pairup ( r[i] ) )
{
r[i] = x;
l[x] = i;
return 1;
}
return 0;
}
vector<pair<int, int>>ans;
int main()
{
int N, M, E;
f >> N >> M >> E;
for ( int i = 1; i <= E; i++ )
{
int x, y;
f >> x >> y;
G[x].pb ( y );
}
bool ok = 1;
for ( ok; ok != 0; )
{
ok = 0;
for ( int i = 1; i <= N; i++ )
viz[i] = 0;
for ( int i = 1; i <= N; i++ )
if ( l[i] == 0 )
{
ok = ok | pairup ( i );
//cout<<nl;
}
//cout<<2222222<<nl;
}
for ( int i = 1; i <= N; i++ )
if ( l[i] )
ans.pb ( mp ( i, l[i] ) );
g << ans.size() << nl;
for ( auto i : ans )
g << i.fi << ' ' << i.se << nl;
return 0;
}