Pagini recente » Cod sursa (job #948053) | Cod sursa (job #2859627) | Cod sursa (job #3290200) | Cod sursa (job #962944) | Cod sursa (job #1436545)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi("cuplaj.in");
ofstream fo("cuplaj.out");
int n,m,v,viz[10001],x,y,i,j,rs,l[10001],r[10001];
vector <int> g[10001];
int cuplaj(int nod, int vizitNr) {
if (viz[nod] == vizitNr) {
return 0;
}
viz[nod] = vizitNr;
for (vector <int>::iterator it = g[nod].begin(); it != g[nod].end(); it++) {
if (viz[r[*it]] != vizitNr) {
if (!r[*it] || cuplaj(r[*it], vizitNr)) {
l[nod] = *it;
r[*it] = nod;
return 1;
}
}
}
return 0;
}
int main() {
fi >> n >> m >> v;
for (i = 0; i < v; i++) {
fi >> x >> y;
g[x].push_back(y);
}
int ok = 1, vizitNr = 1;
while (ok) {
ok = 0;
vizitNr++;
for (i = 1; i <= n; i++) {
if (!l[i]) {
if (cuplaj(i, vizitNr)) {
rs++;
ok = 1;
}
}
}
}
fo << rs << endl;
for (i = 1; i <= n; i++) {
if (l[i]) {
fo << i << ' ' << l[i] << endl;
}
}
return 0;
}