Pagini recente » Cod sursa (job #2057542) | Cod sursa (job #2729235) | Cod sursa (job #2247839) | Cod sursa (job #3198169) | Cod sursa (job #2695995)
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;
ifstream fin("cuplaj.in");
ofstream out("cuplaj.out");
const int MAXN = 1e4;
const int MAXM = 1e4;
const int MAXE = 1e5;
int n, m, e;
vector<int> g[MAXN + 1];
bool viz[MAXN + 1];
int cup_le[MAXN + 1], cup_ri[MAXN + 1];
bool cuplaj(int nod) {
if (viz[nod]) return false;
viz[nod] = true;
for (auto x : g[nod]) {
if (cup_le[x] == 0) {
cup_le[x] = nod;
cup_ri[nod] = x;
return true;
}
}
for (auto x : g[nod]) {
if (cuplaj(cup_le[x])) {
cup_le[x] = nod;
cup_ri[nod] = x;
return true;
}
}
return false;
}
int main() {
fin >> n >> m >> e;
for (int i = 1; i <= e; ++ i) {
int a, b;
fin >> a >> b;
g[a].push_back(b);
}
bool ok = true;
while (ok) {
ok = false;
memset(viz, 0, sizeof(viz));
for (int i = 1; i <= n; ++ i) {
if (!cup_ri[i]) {
ok |= cuplaj(i);
}
}
}
int cnt = 0;
for (int i = 1; i <= n; ++ i) {
if (cup_ri[i])
++ cnt;
}
fout << cnt << '\n';
for (int i = 1; i <= n; ++ i) {
if (cup_ri[i]) {
fout << i << ' ' << cup_ri[i] << '\n';
}
}
return 0;
}