Pagini recente » Cod sursa (job #1203495) | Cod sursa (job #1460837) | Cod sursa (job #1389356) | Cod sursa (job #2084997) | Cod sursa (job #1228571)
#include <fstream>
#include <vector>
#define DIM 10005
#define vint vector<int>::iterator
#define infile "cuplaj.in"
#define outfile "cuplaj.out"
using namespace std;
ifstream f(infile);
ofstream g(outfile);
vector<int> V[DIM];
int L[DIM], R[DIM];
int n1, n2, m, a, b;
bool viz[DIM];
bool cuplaj(int nod) {
if (viz[nod])
return false;
viz[nod] = true;
for (vint it = V[nod].begin(); it != V[nod].end(); ++it)
if (R[*it] == 0) {
R[*it] = nod;
L[nod] = *it;
return true;
}
for (vint it = V[nod].begin(); it != V[nod].end(); ++it)
if (cuplaj(R[*it])) {
R[*it] = nod;
L[nod] = *it;
return true;
}
return false;
}
int main() {
f >> n1 >> n2 >> m;
for (int i = 1; i <= m; ++i) {
f >> a >> b;
V[a].push_back(b);
}
bool ok;
int sol = 0;
do {
ok = false;
for (int i = 1; i <= n1; ++i)
viz[i] = false;
for (int i = 1; i <= n1; ++i)
if (L[i] == 0 && cuplaj(i)) {
++sol;
ok = true;
}
} while (ok);
g << sol << "\n";
for (int i = 1; i <= n1; ++i)
if (L[i] != 0)
g << i << " " << L[i] << "\n";
return 0;
}
//This room. This bullet. There's a bullet for everyone. And a time. And a place. Yes... maybe this is how it has to be. - 47