Pagini recente » Cod sursa (job #1991843) | Cod sursa (job #153046) | Cod sursa (job #1394471) | Cod sursa (job #1770868) | Cod sursa (job #2017762)
# include <iostream>
# include <fstream>
# include <vector>
# include <cstring>
using namespace std;
const int MAX_N = 10000;
vector<int> bords[1 + MAX_N];
int l[1 + MAX_N];
int r[1 + MAX_N];
bool f[1 + MAX_N];
bool match( int u ) {
if ( f[u] )
return false;
f[u] = true;
for ( int v : bords[u] )
if ( !r[v] ) {
l[u] = v;
r[v] = u;
f[u] = false;
return true;
}
for ( int v : bords[u] )
if ( !f[r[v]] && match( r[v] ) ) {
l[u] = v;
r[v] = u;
f[u] = false;
return true;
}
return false;
}
int main() {
ifstream fin( "cuplaj.in" );
ofstream fout( "cuplaj.out" );
int n, m, e;
fin >> n >> m >> e;
for ( int i = 0; i < e; i ++ ) {
int a, b;
fin >> a >> b;
bords[a].push_back( b );
}
int cuplaj = 0;
bool matched_any;
do {
matched_any = false;
for ( int i = 1; i <= n; i ++ ) {
if ( !l[i] && match( i ) ) {
cuplaj ++;
matched_any = true;
}
}
} while ( matched_any );
fout << cuplaj << '\n';
for ( int i = 1; i <= n; i ++ )
if ( l[i] )
fout << i << ' ' << l[i] << '\n';
return 0;
}