Pagini recente » Istoria paginii utilizator/cozmacatalin | Color2 | Taietura | Caramizi | Cod sursa (job #2201620)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
#define NMAX 10005
int m, n, e;
vector<int> v[NMAX];
int stg[NMAX], dr[NMAX], viz[NMAX];
int adauga(int x) {
if (viz[x])
return 0;
viz[x] = 1;
int i, len = v[x].size();
for (i = 0; i < len; ++i)
if (!dr[v[x][i]]) {
stg[x] = v[x][i];
dr[v[x][i]] = x;
return 1;
}
for (i = 0; i < len; ++i)
if (adauga(dr[v[x][i]])) {
stg[x] = v[x][i];
dr[v[x][i]] = x;
return 1;
}
return 0;
}
int main() {
int x, y, i, ok;
f >> m >> n >> e;
for (i = 0; i < e; ++i) {
f >> x >> y;
v[x].push_back(y);
}
ok = 1;
int nr = 0;
while (ok) {
ok = 0;
memset(viz + 1, 0, m * sizeof(int));
for (i = 1; i <= m; ++i)
if (stg[i] == 0 && adauga(i)) {
ok = 1;
++nr;
}
}
g << nr << '\n';
for (i = 1; i <= m; ++i)
if (stg[i] > 0)
g << i << ' ' << stg[i] << '\n';
return 0;
}