Pagini recente » Cod sursa (job #645004) | Cod sursa (job #3180500) | Cod sursa (job #3252905) | Cod sursa (job #433998) | Cod sursa (job #568138)
Cod sursa(job #568138)
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
int n, m, e;
#define MAXN 10005
vector <int> g [MAXN];
bitset <MAXN> viz;
int p[MAXN], r[MAXN];
typedef vector <int>::iterator iter;
fstream fin ("cuplaj.in", ios::in);
fstream fout ("cuplaj.out", ios::out);
bool match (int i)
{
if (viz[i])
return false;
viz[i] = true;
for (iter it = g[i].begin (); it != g[i].end (); ++it) {
if (!r[*it]) {
p[i] = *it;
r[*it] = i;
return true;
}
}
for (iter it = g[i].begin (); it != g[i].end (); ++it) {
if (match (r [*it])) {
p[i] = *it;
r[*it] = i;
return true;
}
}
return false;
}
int main ()
{
fin >> n >> m >> e;
for (int i = 0, x, y; i < e; ++i) {
fin >> x >> y;
g[x].push_back (y);
}
bool ok = true;
while (ok) {
ok = false;
viz.reset ();
for (int i = 1; i <= n; ++i) {
if (!p[i])
ok |= match (i);
}
}
int num = 0;
for (int i = 1; i <= n; ++i)
if (p[i])
++num;
fout << num << endl;
for (int i = 1; i <= n; ++i)
if (p[i])
fout << i << " " << p[i] << endl;
fin.close ();
fout.close ();
return 0;
}