Pagini recente » Cod sursa (job #3004771) | Cod sursa (job #3121482) | Cod sursa (job #1233216) | Cod sursa (job #2713212) | Cod sursa (job #553412)
Cod sursa(job #553412)
#include <algorithm>
#include <bitset>
#include <fstream>
#include <vector>
using namespace std;
const char Input[] = "cuplaj.in";
const char Output[] = "cuplaj.out";
const int Dim = 10001;
short int N, M, XXX;
int E;
short int l[Dim], r[Dim];
bitset <Dim> f;
vector <short int> v[Dim];
inline bool PairUp( const short int &nod ) {
vector <short int> :: iterator it;
if( f[nod] == true )
return 0;
f[nod] = true;
for( it = v[nod].begin(); it != v[nod].end(); ++it )
if( !r[*it] ) {
l[nod] = *it;
r[*it] = nod;
return 1;
}
for( it = v[nod].begin(); it != v[nod].end(); ++it )
if( PairUp( r[*it] ) ) {
l[nod] = *it;
r[*it] = nod;
return 1;
}
return 0;
}
int main() {
ifstream fin( Input );
ofstream fout( Output );
bool ok;
short int i, x, y;
fin >> N >> M >> E;
while( E-- ) {
fin >> x >> y;
v[x].push_back( y );
}
do {
ok = false;
f.reset();
for( i = 1; i <= N; ++i )
if( !l[i] && PairUp( i ) ) {
++XXX;
ok = true;
}
}
while( ok == true );
fout << XXX << "\n";
for( i = 1; i <= N; ++i )
if( l[i] )
fout << i << " " << l[i] << "\n";
fin.close();
fout.close();
return 0;
}