Pagini recente » Cod sursa (job #3212422) | Cod sursa (job #1165771) | Cod sursa (job #495168) | Cod sursa (job #2893435) | Cod sursa (job #2685494)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
int N, M, E, u, v;
int L[10003], R[10003];
vector<int> G[10003];
bool sel[10003];
bool cuplaj(int nod) {
sel[nod] = true;
for (auto i : G[nod])
if (!R[i]) {
L[nod] = i;
R[i] = nod;
return true;
}
for (auto i : G[nod])
if (!sel[R[i]] && cuplaj(R[i])) {
L[nod] = i;
R[i] = nod;
return true;
}
return false;
}
int cuplaj() {
bool can = true;
while (can) {
can = false;
memset(sel, false, sizeof(sel));
for (int i = 1; i <= N; i++)
if (!L[i] && !sel[i])
can |= cuplaj(i);
}
int nr = 0;
for (int i = 1; i <= N; i++)
nr += (L[i] != 0);
return nr;
}
int main() {
f >> N >> M >> E;
for (int i = 1; i <= E; i++) {
f >> u >> v;
G[u].push_back(v);
}
g << cuplaj() << "\n";
for (int i = 1; i <= N; i++)
if (L[i]) {
g << i << " " << L[i] << "\n";
}
return 0;
}