Pagini recente » Cod sursa (job #2735342) | Cod sursa (job #1042206) | Cod sursa (job #1185011) | Cod sursa (job #3264372) | Cod sursa (job #301350)
Cod sursa(job #301350)
#include <stdio.h>
#include <vector>
#include <string.h>
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], fol[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]) return 0;
viz[nod] = 1;
int len = G[nod].size();
for (int i = 0; i < len; i++)
if (!cuplaj[G[nod][i]]) {
cuplaj[G[nod][i]] = nod; fol[nod] = 1;
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; fol[nod] = 1;
return 1;
}
return 0;
}
int main() {
cit();
int ok = 1;
while (ok) {
ok = 0;
memset(viz, 0, sizeof(viz));
for (int i = 1; i <= n; i++)
if (!fol[i] && cupleaza(i)) {
sol++;
ok = 1;
}
}
printf("%d\n", sol);
for (k = 1; k <= m; k++)
if (cuplaj[k]) printf("%d %d\n", cuplaj[k], k);
return 0;
}