Pagini recente » Cod sursa (job #267135) | Cod sursa (job #2456902) | Cod sursa (job #608656) | Cod sursa (job #333245) | Cod sursa (job #2756203)
#include <bits/stdc++.h>
#define NMAX 10000
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");
vector <int> G[NMAX + 1];
int n, m;
bool is_vis[NMAX + 1];
int l[NMAX + 1], r[NMAX + 1];
bool pair_up(int poz) {
int i, nvec, vec;
if (is_vis[poz] == 1)
return 0;
is_vis[poz] = 1;
nvec = G[poz].size();
for (i = 0; i < nvec; i++) {
vec = G[poz][i];
if (l[vec] == 0) {
r[poz] = vec;
l[vec] = poz;
return 1;
}
}
for (i = 0; i < nvec; i++) {
vec = G[poz][i];
if (!is_vis[l[vec]] && pair_up(l[vec])) {
r[poz] = vec;
l[vec] = poz;
return 1;
}
}
return 0;
}
void cuplaj() {
int i, ok;
do {
ok = 0;
for (i = 1; i <= n; i++)
is_vis[i] = 0;
for (i = 1; i <= n; i++)
if (r[i] == 0 && pair_up(i))
ok = 1;
}while (ok == 1);
}
int main() {
int e, i, x, y, sol;
fin >> n >> m >> e;
for (i = 0; i < e; i++) {
fin >> x >> y;
G[x].push_back(y);
}
cuplaj();
sol = 0;
for (i = 1; i <= n; i++)
if (r[i] > 0)
sol++;
fout << sol << "\n";
for (i = 1; i <= n; i++)
if (r[i] > 0)
fout << i << " " << r[i] << "\n";
return 0;
}