Pagini recente » Cod sursa (job #1385072) | Cod sursa (job #1831766) | Istoria paginii runda/simlotvrancea2010baraj1.1/clasament | Istoria paginii runda/porc_again/clasament | Cod sursa (job #985083)
Cod sursa(job #985083)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
#define Nmax 10002
vector <int> G[Nmax];
int st[Nmax], dr[Nmax];
char use[Nmax];
int N, M, E, nr;
void read()
{
ifstream f("cuplaj.in");
f >> N >> M >> E;
for ( int i = 1, a, b; i <= E; ++i )
{
f >> a >> b;
G[a].push_back( b );
}
f.close();
}
int cupleaza( int nod )
{
if ( use[nod] )
return 0;
use[nod] = 1;
for ( unsigned i = 0; i < G[nod].size(); ++i )
{
if ( !dr[ G[nod][i] ] || cupleaza( dr[ G[nod][i] ] ) )
{
st[nod] = G[nod][i];
dr[ G[nod][i] ] = nod;
return 1;
}
}
return 0;
}
void cuplaj()
{
for ( int i = 1; i <= N; ++i )
{
if ( st[i] )
continue;
memset( use, 0, sizeof( use ) );
cupleaza( i );
}
/*
for ( int change = 1; change; )
{
change = 0;
memset( use, 0, sizeof( use ) );
for ( int i = 1; i <= N; ++i )
if ( !st[i] )
change |= cupleaza( i );
}
*/
for ( int i = 1; i <= N; ++i )
nr += ( st[i] > 0 );
}
void print()
{
ofstream g("cuplaj.out");
g << nr << '\n';
for ( int i = 1; i <= N; ++i )
if ( st[i] )
g << i << " " << st[i] << '\n';
g.close();
}
int main()
{
read();
cuplaj();
print();
return 0;
}