Pagini recente » Cod sursa (job #3324720) | Cod sursa (job #2396852) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3324719)
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
vector <int> v[10005];
int viz[10005], tata[10005], gasit[10005];
bool dfs( int x ){
int i;
if( viz[x] == 1 ){
return 0;
}
viz[x] = 1;
for( i = 0; i < v[x].size(); i++ ){
if( tata[v[x][i]] == -1 ){
tata[v[x][i]] = x;
gasit[x] = 1;
return 1;
}
}
for( i = 0; i < v[x].size(); i++ ){
if( dfs( tata[v[x][i]] ) ){
tata[v[x][i]] = x;
gasit[x] = 1;
return 1;
}
}
return 0;
}
int main() {
int n, m, e, i, x, y, r, ok;
ifstream fin( "cuplaj.in" );
ofstream fout( "cuplaj.out" );
fin >> n >> m >> e;
for( i = 0; i < e; i++ ){
fin >> x >> y;
v[x].push_back( y );
}
for( i = 1; i <= m; i++ ){
tata[i] = -1;
}
ok = 1;
while( ok == 1 ){
ok = 0;
memset( viz, 0, sizeof( viz ) );
for( i = 1; i <= n; ++i ){
if( gasit[i] == 0 ){
ok |= dfs( i );
}
}
}
r = 0;
for( i = 1; i <= n; i++ ){
if( gasit[i] ){
r++;
}
}
fout << r << '\n';
for( i = 1; i <= m; i++ ){
if( tata[i] != -1 ){
fout << tata[i] << ' ' << i << '\n';
}
}
return 0;
}