Pagini recente » Cod sursa (job #2584225) | Cod sursa (job #706825) | Cod sursa (job #1155499) | Cod sursa (job #1674570) | Cod sursa (job #313249)
Cod sursa(job #313249)
#include <cstdio>
#include <vector>
#define MAXN 10005
#define pb push_back
using namespace std;
vector <int> lv[MAXN];
int N, M, E;
int d[MAXN], p[MAXN];
int iter, viz[MAXN];
void read () {
int x, y;
for (scanf ("%d %d %d", &N, &M, &E); E; -- E) {
scanf (" %d %d", &x, &y);
lv[x].pb(y);
}
}
int cuplaj (int nod) {
int sz = lv[nod].size();
viz[nod] = iter;
for (int i = 0; i < sz; ++ i)
if (!d[lv[nod][i]]) {
d[lv[nod][i]] = nod;
p[nod] = lv[nod][i];
return 1;
}
for (int i = 0; i < sz; ++ i)
if (viz[d[lv[nod][i]]] != iter && cuplaj(d[lv[nod][i]])) {
d[lv[nod][i]] = nod;
p[nod] = lv[nod][i];
return 1;
}
return 0;
}
void solve () {
bool ok = false;
int i;
while (!ok) {
ok = true;
++ iter;
for (i = 1; i <= N; ++ i)
if (!p[i] && cuplaj(i)) {
ok = false;
++ iter;
}
}
int sol = 0;
for (i = 1; i <= N; ++ i)
if (p[i]) ++ sol;
printf ("%d\n", sol);
for (i = 1; i <= N; ++ i)
if (p[i]) printf ("%d %d\n", i, p[i]);
}
int main () {
freopen ("cuplaj.in", "r", stdin);
freopen ("cuplaj.out", "w", stdout);
read ();
solve ();
return 0;
}