Pagini recente » Cod sursa (job #837273) | Cod sursa (job #1720421) | Cod sursa (job #2646071) | Cod sursa (job #2478520) | Cod sursa (job #3218690)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
#define NMAX 10005
int n, m, e, uz[2 * NMAX], st[2 * NMAX], dr[2 * NMAX];
vector<int> v[2 * NMAX];
bool cup(int nod) {
uz[nod] = 1;
//cout << "uz[nod] = " << uz[nod] << endl;
for (auto it : v[nod]) {
if (!st[it]) {
st[it] = nod;
dr[nod] = it;
//cout << "1 st[it] = " << st[it] << " " << "dr[nod] = " << dr[nod] << endl;
return 1;
}
}
for (auto it : v[nod]) {
if (!uz[st[it]] && cup(st[it])) {
st[it] = nod;
dr[nod] = it;
//cout << "2 st[it] = " << st[it] << " " << "dr[nod] = " << dr[nod] << endl;
return 1;
}
}
return 0;
}
int main(){
fin >> n >> m >> e;
for (int i=1;i<=e;i++) {
int a, b;
fin >> a >> b;
b += NMAX;
v[a].push_back(b);
v[b].push_back(a);
}
int ok = 1;
while (ok) {
ok = 0;
memset(uz, 0, sizeof(uz));
for (int i=1;i<=n;i++) {
//cout << i << "\n";
// cout << "uz[i] = " << uz[i] << " " << "dr[i] = " << dr[i] << endl;
if (!uz[i] && !dr[i]) {
// cout << "apelez " << i << endl;
ok |= cup(i);
}
}
}
int ans = 0;
for (int i=1;i<=n;i++) {
if (dr[i]) ans++;
}
fout << ans << '\n';
for (int i=1;i<=n;i++) {
if (dr[i]) fout << i << ' ' << dr[i] - NMAX << '\n';
}
return 0;
}