Pagini recente » Cod sursa (job #2704037) | Cod sursa (job #2171569) | Cod sursa (job #1444985) | Cod sursa (job #2220440) | Cod sursa (job #2017881)
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 10000;
vector<int> graph[1+MAX_N];
int last[1+MAX_N], l[1+MAX_N], r[1+MAX_N];
int op;
bool pairup(int nod) {
if(last[nod] == op)
return false;
last[nod] = op;
for(auto it: graph[nod])
if(l[it] == 0) {
l[it] = nod;
r[nod] = it;
return true;
}
for(auto it: graph[nod])
if(l[it] != 0 && pairup(l[it])) {
l[it] = nod;
r[nod] = it;
return true;
}
return false;
}
int main() {
int n, m, e, a, b, cuplaj = 0;
FILE *fin = fopen("cuplaj.in", "r");
fscanf(fin, "%d%d%d", &n, &m, &e);
for(int i = 0; i < e; ++i) {
fscanf(fin, "%d%d", &a, &b);
graph[a].push_back(b);
}
fclose(fin);
bool cuplate;
do {
++op;
cuplate = false;
for(int i = 1; i <= n; ++i)
if(r[i] == 0 && pairup(i)) {
cuplaj++;
cuplate = true;
}
} while(cuplate);
FILE *fout = fopen("cuplaj.out", "w");
fprintf(fout, "%d\n", cuplaj);
for(int i = 1; i <= n; ++i)
if(r[i] != 0)
fprintf(fout, "%d %d\n", i, r[i]);
fclose(fout);
return 0;
}