Pagini recente » Cod sursa (job #1144308) | Cod sursa (job #2745665) | Cod sursa (job #157932) | Cod sursa (job #3226824) | Cod sursa (job #379105)
Cod sursa(job #379105)
#include <stdio.h>
#include <vector>
using namespace std;
#define MAXX 10010
int n, m, e, p, q, sol;
int cuplaj[MAXX];
vector <int> G[MAXX];
int cupleaza(int nod) {
int len = G[nod].size();
for (int i = 0; i < len; i++)
if (!cuplaj[G[nod][i]]) {
cuplaj[G[nod][i]] = nod;
sol++;
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() {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
scanf("%d %d %d", &n, &m, &e);
for (; e; e--) {
scanf("%d %d", &p, &q);
G[p].push_back(q);
}
for (int i = 1; i <= n; i++)
cupleaza(i);
printf("%d\n", sol);
for (int i = 1; i <= m; i++)
if (cuplaj[i])
printf("%d %d\n", cuplaj[i], i);
return 0;
}