Pagini recente » Cod sursa (job #422598) | Cod sursa (job #1768752) | Cod sursa (job #2327543) | Cod sursa (job #341372) | Cod sursa (job #941192)
Cod sursa(job #941192)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
#define ech(It, A) for (typeof(A.begin()) It = A.begin(); It != A.end(); ++It)
vector< vector<int> > adjl;
vector<int> match1;
vector<int> match2;
vector<bool> visited;
bool dfs( int v1 ) {
if (visited[v1]) return false;
visited[v1] = true;
ech(it, adjl[v1]) {
if ( match2[*it] == 0 || dfs(match1[*it]) ) {
match1[v1] = *it;
match2[*it] = v1;
return true;
}
}
return false;
}
int main() {
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n, m, e;
fin >> n >> m >> e;
adjl.resize(n+1);
match1.resize(n+1);
match2.resize(m+1);
visited.resize(n+1);
for (int u, v, i = 0; i < e; ++i) {
fin >> u >> v;
adjl[u].push_back(v);
}
int cnt = 0;
bool change;
do {
change = false;
fill( visited.begin(), visited.end(), false );
for (int i = 1; i <= n; ++i) {
if (match1[i] == 0 && !visited[i]) {
if (dfs(i)) {
++cnt;
change = true;
}
}
}
} while (change);
fout << cnt << '\n';
for (int i = 1; i <= n; ++i) {
if (match1[i] != 0)
fout << i << ' ' << match1[i] << '\n';
}
return 0;
}