Pagini recente » Cod sursa (job #2710673) | Cod sursa (job #1547420) | Cod sursa (job #249609) | Cod sursa (job #2050850) | Cod sursa (job #301329)
Cod sursa(job #301329)
#include <stdio.h>
#include <vector>
using namespace std;
#define MAX_N 10010
int n, m, e, sol, k;
vector <int> G[MAX_N];
int cuplaj[MAX_N], viz[MAX_N];
void cit() {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &n, &m, &e);
for (int i = 1; i <= e; i++) {
int p, q;
scanf("%d %d", &p, &q);
G[p].push_back(q);
}
}
int cupleaza(int nod) {
if (viz[nod] == k) return 0;
viz[nod] = k;
int len = G[nod].size();
for (int i = 0; i < len; i++)
if (!cuplaj[G[nod][i]]) {
cuplaj[G[nod][i]] = nod;
return 1;
}
for (int i = 0; i < len; i++)
if (cuplaj[G[nod][i]] != nod && cupleaza(cuplaj[G[nod][i]])) {
cuplaj[G[nod][i]] = nod;
return 1;
}
return 0;
}
int main() {
cit();
for (k = 1; k <= n; k++)
sol += cupleaza(k);
printf("%d\n", sol);
for (k = 1; k <= n; k++)
if (cuplaj[k]) printf("%d %d\n", k, cuplaj[k]);
return 0;
}