Pagini recente » Cod sursa (job #732621) | Cod sursa (job #2460414) | Cod sursa (job #2433880) | Cod sursa (job #1005315) | Cod sursa (job #3337222)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cuplaj.in");
ofstream h("cuplaj.out");
const int NMAX = 10005;
int N, M, E;
vector<int> g[NMAX];
int mt[NMAX], vis[NMAX], timer;
bool try_kuhn(int v) {
if (vis[v] == timer)
return false;
vis[v] = timer;
for (int to : g[v]) {
if (mt[to] == 0 || try_kuhn(mt[to])) {
mt[to] = v;
return true;
}
}
return false;
}
int main() {
if (!(f >> N >> M >> E)) return 0;
for(int i = 1; i <= E; i++){
int x, y;
f >> x >> y;
g[x].push_back(y);
}
vector<bool> used1(N + 1, false);
for (int i = 1; i <= N; i++) {
for (int to : g[i]) {
if (mt[to] == 0) {
mt[to] = i;
used1[i] = true;
break;
}
}
}
for (int i = 1; i <= N; i++) {
if (!used1[i]) {
timer++;
try_kuhn(i);
}
}
int sol = 0;
for (int i = 1; i <= M; ++i)
if (mt[i] != 0)
sol++;
h << sol << "\n";
for (int i = 1; i <= M; ++i)
if (mt[i] != 0)
h << mt[i] << " " << i << "\n";
return 0;
}