Pagini recente » Cod sursa (job #1399478) | Cod sursa (job #2942329) | Cod sursa (job #1476515) | Cod sursa (job #2431219) | Cod sursa (job #2635604)
#include <stdio.h>
#include <utility>
#include <queue>
#define NMAX 20005
using namespace std;
FILE* fin, * fout;
int n, m, e;
int g[NMAX][NMAX] = { 0 };
bool viz[NMAX] = { 0 };
int match[NMAX] = { 0 };
bool dfs(int u) {
for (int v = 1;v <= n;++v) {
if (!viz[v] && g[u][v] > 0) {
viz[v] = true;
if (match[v] == 0 || dfs(match[v])) {
match[v] = u;
return true;
}
}
}
return false;
}
void maximumMatching() {
int res = 0;
for (int i = n + 1;i <= n + m;++i) {
for (int j = 1;j <= n + m;++j)
viz[j] = false;
if (dfs(i))
++res;
}
fprintf(fout,"%i\n", res);
for (int i = 1;i <= n;++i)
if(match[i]!=0)
fprintf(fout,"%i %i\n", i, match[i]-n);
}
int main() {
fin = fopen("cuplaj.in", "r");
fout = fopen("cuplaj.out", "w");
fscanf(fin, "%i %i %i", &n, &m, &e);
while (e--) {
int x, y;
fscanf(fin, "%i %i", &x, &y);
g[x][y + n] = 1;
g[y + n][x] = 1;
}
maximumMatching();
return 0;
}