Pagini recente » Cod sursa (job #2943974) | Cod sursa (job #1581259) | Cod sursa (job #1325736) | Cod sursa (job #2309107) | Cod sursa (job #720095)
Cod sursa(job #720095)
#include <fstream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 20000
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int used[MAXN], l[MAXN], r[MAXN], n, m, muchii, rez;
vector<int> g[MAXN];
int pairup(int nod) {
int i;
if (used[nod]) return 0;
used[nod] = 1;
for (i = 0; i < g[nod].size(); ++i) {
if (!r[g[nod][i]]) {
r[g[nod][i]] = nod;
l[nod] = g[nod][i];
return 1;
}
}
for(i = 0; i < g[nod].size(); ++i) {
if (pairup(r[g[nod][i]])) {
r[g[nod][i]] = nod;
l[nod] = g[nod][i];
return 1;
}
}
return 0;
}
int main() {
int i, x, y, change = 1;
fin >> n >> m >> muchii;
for (i = 1; i <= muchii; ++i) {
fin >> x >> y;
g[x].push_back(y);
}
for (change = 1; change; ) {
change = 0;
memset(used, 0, sizeof(used));
for (i = 1; i <= n; ++i)
if (!l[i])
if (pairup(i))
change = 1;
}
for (i = 1; i <= n; ++i) if (l[i] > 0) ++rez;
fout << rez << "\n";
for (i = 1; i <= n; ++i)
if (l[i] > 0)
fout << i << " " << l[i] << "\n";
fout.close();
return 0;
}