Pagini recente » Cod sursa (job #805515) | Cod sursa (job #239279) | Cod sursa (job #2409273) | Cod sursa (job #1354873) | Cod sursa (job #2246215)
#include <fstream>
#include <vector>
#include <bitset>
#define DEF 10010
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");
int n, m, e, sol, L[DEF], R[DEF];
vector < int > V[DEF];
bitset < DEF > Viz;
int cupleaza (int nod) {
if (Viz[nod]) {
return 0;
}
Viz[nod] = 1;
for (int i = 0; i < V[nod].size (); ++ i) {
if (R[V[nod][i]] == 0) {
L[nod] = V[nod][i];
R[V[nod][i]] = nod;
++ sol;
return 1;
}
}
for (int i = 0; i < V[nod].size (); ++ i) {
if (cupleaza (R[V[nod][i]])) {
L[nod] = V[nod][i];
R[V[nod][i]] = nod;
return 1;
}
}
return 0;
}
int main () {
fin >> n >> m >> e;
for (int i = 1; i <= e; ++ i) {
int x, y;
fin >> x >> y;
V[x].push_back (y);
}
bool ok;
do {
ok = false;
Viz.reset ();
for (int i = 1; i <= n; ++ i) {
if (L[i] == 0) {
ok += cupleaza (i);
}
}
} while (ok);
fout << sol << "\n";
for (int i = 1; i <= n; ++ i) {
if (L[i] != 0) {
fout << i << " " << L[i] << "\n";
}
}
return 0;
}