Pagini recente » Cod sursa (job #813176) | Cod sursa (job #2831419) | Cod sursa (job #2359834) | Cod sursa (job #1790805) | Cod sursa (job #1494470)
#include <fstream>
#include <vector>
#include <cstring>
#include <algorithm>
#define DIM 10010
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");
int n, m, e;
vector<int> l[DIM];
int L[DIM], R[DIM];
bool vis[DIM];
bool cupleaza(int node) {
vis[node] = true;
for (int i = 0; i < l[node].size(); i++) {
int child = l[node][i];
if(!R[child]) {
L[node] = child;
R[child] = node;
return true;
}
}
for (int i = 0; i < l[node].size(); i++) {
int child = l[node][i];
if(!vis[R[child]] && cupleaza(R[child])) {
L[node] = child;
R[child] = node;
return true;
}
}
return false;
}
int main () {
fin >> n >> m >> e;
for (int i = 1; i <= e; i++) {
int x, y;
fin >> x >> y;
l[x].push_back(y);
}
bool ok;
int cuplaj = 0;
do {
ok = false;
memset(vis, 0, sizeof vis);
for (int i = 1; i <= n; i++) {
if(!L[i] && cupleaza(i)) {
ok = true;
cuplaj++;
}
}
}while (ok);
fout << cuplaj << "\n";
for (int i = 1; i <= max(n, m); i++)
if(L[i])
fout << i << " " << L[i] << "\n";
return 0;
}