Pagini recente » Cod sursa (job #2807343) | Cod sursa (job #1325662) | Cod sursa (job #1046237) | Cod sursa (job #583109) | Cod sursa (job #862184)
Cod sursa(job #862184)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
const int N = 11000;
int n, m, e, l[N], r[N];
vector<int> v[N];
bool ver[N];
bool pairup(int nod) {
ver[nod] = 1;
int i;
for(i = 0 ;i < v[nod].size(); ++i) if(!ver[r[v[nod][i]]])
if(!r[v[nod][i]]) {
r[v[nod][i]] = nod;
l[nod] = v[nod][i];
return true;
}
for(i = 0; i < v[nod].size(); ++i) if(!ver[r[v[nod][i]]])
if(pairup(r[v[nod][i]])) {
r[v[nod][i]] = nod;
l[nod] = v[nod][i];
return true;
}
return false;
}
int cuplaj() {
int i, c = 0, ok = 0;
while(!ok) {
ok = 1;
for(i = 1; i<=n; ++i)
ver[i] = 0;
for(i = 1; i<=n; ++i)
if(!l[i] && pairup(i)) {
++c;
ok = 0;
}
}
return c;
}
int main() {
int i, a, b;
in >> n >> m >> e;
for(i = 1; i<=e; ++i) {
in >> a >> b;
v[a].push_back(b);
}
out << cuplaj() << "\n";
for(i = 1; i<=n; ++i)
if(l[i])
out << i << " " << l[i] << "\n";
return 0;
}