Pagini recente » Cod sursa (job #1606017) | Cod sursa (job #2162378) | Cod sursa (job #2510810) | Cod sursa (job #3162727) | Cod sursa (job #553416)
Cod sursa(job #553416)
#include <algorithm>
#include <bitset>
#include <fstream>
#include <vector>
using namespace std;
const char Input[] = "cuplaj.in";
const char Output[] = "cuplaj.out";
ifstream fin( Input );
ofstream fout( Output );
const short int Dim = 10001;
char s[Dim];
short int N, M, L, XXX;
short int l[Dim], r[Dim];
int E;
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;
}
inline void ReadShort( short int &x ) {
while( !isdigit( s[L] ) )
if( ++L == Dim ) {
fin.read( s, Dim );
L = 0;
}
for( x = 0; isdigit( s[L] ); ) {
x = x * 10 + s[L] - '0';
if( ++L == Dim ) {
fin.read( s, Dim );
L = 0;
}
}
}
inline void ReadInt( int &x ) {
while( !isdigit( s[L] ) )
if( ++L == Dim ) {
fin.read( s, Dim );
L = 0;
}
for( x = 0; isdigit( s[L] ); ) {
x = x * 10 + s[L] - '0';
if( ++L == Dim ) {
fin.read( s, Dim );
L = 0;
}
}
}
int main() {
bool ok;
short int i, x, y;
ReadShort( N ); //fin >> N;
ReadShort( M ); //fin >> M;
ReadInt( E ); //fin >> E;
while( E-- ) {
ReadShort( x ); //fin >> x;
ReadShort( y ); //fin >> 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;
}