Pagini recente » Cod sursa (job #2175322) | Cod sursa (job #668242) | Cod sursa (job #2563720) | Cod sursa (job #667861) | Cod sursa (job #318139)
Cod sursa(job #318139)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
const int MAX_N = 10005;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n, m, e;
vector<int> v[MAX_N];
int l_pair[MAX_N], r_pair[MAX_N];
bool vis[MAX_N];
void read() {
fin >> n >> m >> e;
for (int i = 0; i < e; ++i) {
int a, b;
fin >> a >> b;
v[a].push_back(b);
}
}
int cupleaza(int nod) {
if (vis[nod]) return 0;
vis[nod] = true;
for (vector<int>::iterator it = v[nod].begin(); it != v[nod].end(); ++it)
if (!r_pair[*it]) {
l_pair[nod] = *it;
r_pair[*it] = nod;
return 1;
}
for (vector<int>::iterator it = v[nod].begin(); it != v[nod].end(); ++it)
if (r_pair[*it] && cupleaza(r_pair[*it])) {
l_pair[nod] = *it;
r_pair[*it] = nod;
return 1;
}
return 0;
}
void solve() {
int sol = 0;
bool ok = true;
while (ok) {
ok = false;
memset(vis, 0, sizeof(vis));
for (int i = 1; i <= n; ++i)
if (!l_pair[i] && cupleaza(i)) {
ok = true;
++sol;
}
}
fout << sol << "\n";
for (int i = 1; i <= n; ++i)
if (l_pair[i])
fout << i << " " << l_pair[i] << "\n";
}
int main() {
read();
solve();
}