Pagini recente » Cod sursa (job #2989168) | Cod sursa (job #3194958) | Cod sursa (job #111445) | Cod sursa (job #1579249) | Cod sursa (job #2860495)
#include <fstream>
#include <vector>
#include <cstring>
#define NMAX 10005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<vector<int>> gr;
int N, M, E;
int l[NMAX], r[NMAX];
bool d[NMAX];
void read() {
fin >> N >> M >> E;
gr.resize(N + 1);
int x, y;
for (int i = 1; i <= E; ++i) {
fin >> x >> y;
gr[x].push_back(y);
}
}
void setCuplaj(int a, int b) {
l[a] = b;
r[b] = a;
}
bool cupleaza(int nod) {
if (d[nod] == true) {
return false;
}
d[nod] = true;
for (int i : gr[nod]) {
if (!r[i]) {
setCuplaj(nod, i);
return true;
}
}
for (int i : gr[nod]) {
if (cupleaza(r[i])) {
setCuplaj(nod, i);
return true;
}
}
return false;
}
void afis() {
int con = 0;
for (int i = 1; i <= N; ++i) {
if (l[i]) {
++con;
}
}
fout << con << "\n";
for (int i = 1; i <= N; ++i) {
if (l[i]) {
fout << i << " " << l[i] << "\n";
}
}
}
int main()
{
read();
bool ok = true;
while (ok) {
ok = false;
memset(d, 0, sizeof d);
for (int i = 1; i <= N; ++i) {
if (!l[i]) {
if (cupleaza(i)) {
ok = true;
}
}
}
}
afis();
return 0;
}