Pagini recente » Cod sursa (job #2717338) | Cod sursa (job #1196281) | Cod sursa (job #316789) | Cod sursa (job #2169800) | Cod sursa (job #1222800)
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
#define MAX 100010
vector<int> Gr[MAX];
bool Use[MAX];
int N, M, E, Sol, L[MAX], R[MAX];
bool Dfs(int X) {
int Y;
if (Use[X]) return 0;
Use[X] = 1;
for (int i = 0; i < Gr[X].size(); i++) {
Y = Gr[X][i];
if (R[Y] == 0 || Dfs(R[Y])) {
L[X] = Y;
R[Y] = X;
return 1;
}
}
return 0;
}
int main() {
int X, Y;
freopen("cuplaj.in","r",stdin);
freopen("cuplaj.out","w",stdout);
scanf("%d %d %d", &N, &M, &E);
for (int i = 1; i <= E; i++) {
scanf("%d %d", &X, &Y);
Gr[X].push_back(Y);
}
bool ok = 1;
while (ok) {
ok = 0;
memset(Use, 0, sizeof(Use));
for (int i = 1; i <= N; i++) {
if (L[i] == 0 && Dfs(i)) {
ok = 1;
Sol++;
}
}
}
printf("%d\n", Sol);
for (int i = 1; i <= N; i++) {
if (L[i]) {
printf("%d %d\n", i, L[i]);
}
}
return 0;
}