Pagini recente » Cod sursa (job #890803) | Cod sursa (job #3335664) | Cod sursa (job #444001) | Cod sursa (job #1782488) | Cod sursa (job #3337220)
#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];
vector<int> mt;
vector<bool> used;
bool try_kuhn(int v) {
if (used[v])
return false;
used[v] = true;
for (int to : g[v]) {
if (mt[to] == -1 || 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);
}
mt.assign(M + 1, -1);
vector<bool> used1(N + 1, false);
for (int i = 1; i <= N; i++) {
for (int to : g[i]) {
if (mt[to] == -1) {
mt[to] = i;
used1[i] = true;
break;
}
}
}
for (int i = 1; i <= N; i++) {
if (used1[i])
continue;
used.assign(N + 1, false);
try_kuhn(i);
}
int sol = 0;
for (int i = 1; i <= M; ++i)
if (mt[i] != -1)
sol++;
h << sol << "\n";
for (int i = 1; i <= M; ++i)
if (mt[i] != -1)
h << mt[i] << " " << i << "\n";
return 0;
}