Pagini recente » Cod sursa (job #2328583) | Cod sursa (job #2423902) | Cod sursa (job #1112863) | Cod sursa (job #1100552) | Cod sursa (job #2677185)
#include <iostream>
#include <fstream>
#include <stack>
#include <algorithm>
#include <string>
#include <queue>
#include <vector>
#include <map>
#include <cmath>
#include <stdio.h>
#define MAX 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int N, M, E;
vector<int> Graf[MAX];
int v1[MAX], v2[MAX];
int checked[MAX];
int current;
void read() {
fin >> N >> M >> E;
int x, y;
while (E--) {
fin >> x >> y;
Graf[x].push_back(y);
}
}
bool augmentez(const int u) {
if (checked[u] == current)
return false;
checked[u] = current;
for (auto& it : Graf[u]) {
if (!v2[it]) {
v2[it] = u;
v1[u] = it;
return true;
}
}
for (auto& it : Graf[u]) {
if (augmentez(v2[it])) {
v1[u] = it;
v2[it] = u;
return true;
}
}
return false;
}
void cuplaj() {
int ans = 0;
bool exista = 1;
current = 1;
while (exista) {
exista = 0;
for (int i = 1; i <= N; ++i)
if (!v1[i])
exista |= augmentez(i);
++current;
}
for (int i = 1; i <= N; ++i)
if (v1[i])
++ans;
fout << ans << "\n";
for (int i = 1; i <= N; ++i)
if (v1[i])
fout << i << " " << v1[i] << "\n";
}
int main() {
read();
cuplaj();
return 0;
}