Pagini recente » Cod sursa (job #1599276) | Cod sursa (job #2959209) | Cod sursa (job #1492399) | Cod sursa (job #380406) | Cod sursa (job #2330900)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e4;
vector <int> gr[MAXN + 1];
int gagic[MAXN + 1], pereche[MAXN + 1];
bool viz[MAXN + 1];
bool bkt_opt (int baiat) {
if (viz[baiat] == true)
return false;
viz[baiat] = true;
for (auto fata : gr[baiat])
if (gagic[fata] == false || bkt_opt (gagic[fata]) == true) {
pereche[baiat] = fata;
gagic[fata] = baiat;
return true;
}
return false;
}
int main() {
int n, m, e, i, x, y, nr;
freopen ("cuplaj.in", "r", stdin);
freopen ("cuplaj.out", "w", stdout);
scanf ("%d%d%d", &n, &m, &e);
for (i = 1; i <= e; i++) {
scanf ("%d%d", &x, &y);
gr[x].push_back (y);
}
do {
memset (viz, 0, sizeof (viz));
nr = 0;
for (i = 1; i <= n; i++)
if (pereche[i] == 0)
nr += bkt_opt (i);
} while (nr);
nr = 0;
for (i = 1; i <= n; i++)
if (pereche[i])
nr++;
printf ("%d\n", nr);
for (i = 1; i <= n; i++)
if (pereche[i])
printf ("%d %d\n", i, pereche[i]);
return 0;
}