Pagini recente » Cod sursa (job #2487815) | Cod sursa (job #1113165) | Cod sursa (job #259985) | Cod sursa (job #1060215) | Cod sursa (job #985080)
Cod sursa(job #985080)
#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 change = 1; change; )
{
change = 0;
for ( int i = 1; i <= N; ++i )
{
if ( st[i] )
continue;
int val = cupleaza( i );
if ( val )
nr++;
else
{
memset( use, 0, sizeof( use ) );
val = cupleaza( i );
if ( val )
nr++;
}
change |= val;
}
}
}
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;
}