Pagini recente » Cod sursa (job #1605649) | Cod sursa (job #1217772) | Cod sursa (job #1647157) | Cod sursa (job #2779619) | Cod sursa (job #1268384)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 1e4 + 2;
vector <int> G[Nmax];
int st[Nmax], dr[Nmax];
int use[Nmax];
int N, M, E;
int pairup( int nod )
{
if ( use[nod] )
return 0;
use[nod] = 1;
for ( auto x: G[nod] )
if ( !dr[x] || pairup( dr[x] ) )
{
st[nod] = x;
dr[x] = nod;
return 1;
}
return 0;
}
void cuplaj()
{
int valid = 1;
do
{
valid = 0;
memset( use, 0, sizeof( use ) );
for ( int i = 1; i <= N; ++i )
if ( !st[i] )
valid |= pairup( i );
} while ( valid );
int nr = 0;
for ( int i = 1; i <= N; ++i )
nr += ( st[i] > 0 );
ofstream out("cuplaj.out");
out << nr << "\n";
for ( int i = 1; i <= N; ++i )
if ( st[i] )
out << i << " " << st[i] << "\n";
}
int main()
{
ifstream in("cuplaj.in");
in >> N >> M >> E;
for ( int i = 1, a, b; i <= E; ++i )
{
in >> a >> b;
G[a].push_back( b );
}
cuplaj();
return 0;
}