Pagini recente » Cod sursa (job #1974150) | Cod sursa (job #2110138) | Cod sursa (job #1807946) | Cod sursa (job #457847) | Cod sursa (job #1192866)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream F("cuplaj.in");
ofstream G("cuplaj.out");
#define IT(type) vector<type>::iterator
const int Nmax = 10010;
int N,M,E,paired[Nmax];
int left_pair[Nmax],right_pair[Nmax];
vector<int> V[Nmax];
bool pair_node(int lnode)
{
if ( lnode == 0 )
return 1;
paired[lnode] = 1;
for (IT(int) rnode=V[lnode].begin();rnode!=V[lnode].end();++rnode)
if ( paired[ left_pair[*rnode] ] == 0 )
if ( pair_node( left_pair[*rnode] ) == 1 )
{
left_pair[*rnode] = lnode;
right_pair[lnode] = *rnode;
return 1;
}
return 0;
}
int main()
{
F>>N>>M>>E;
for (int i=1,x,y;i<=E;++i)
{
F>>x>>y;
V[ x ].push_back( y );
}
bool better = 1;
int out = 0;
while ( better )
{
better = 0;
memset(paired,0,sizeof(paired));
for (int i=1;i<=N;++i)
if ( right_pair[i] == 0 && pair_node( i ) == 1 )
++out , better = 1;
}
G<<out<<'\n';
for (int i=1;i<=N;++i)
if ( right_pair[i] != 0 )
G<<i<<' '<<right_pair[i]<<'\n';
}