Pagini recente » Cod sursa (job #3262495) | Cod sursa (job #1709137) | Cod sursa (job #3283812) | Cod sursa (job #1730280) | Cod sursa (job #356788)
Cod sursa(job #356788)
#include <vector>
#include <cstring>
#include <iostream>
using namespace std;
const int NMAX = 10101;
vector<int>lv[NMAX];
int l[NMAX], r[NMAX];
bool viz[NMAX];
bool cupleaza(int nod) {
if (viz[nod])
return false;
viz[nod] = true;
for (vector<int>::iterator it = lv[nod].begin(); it != lv[nod].end(); ++it)
if (!r[*it]) {
l[nod] = *it;
r[*it] = nod;
return true;
}
for (vector<int>::iterator it = lv[nod].begin(); it != lv[nod].end(); ++it)
if (r[*it] && cupleaza(r[*it])) {
l[nod] = *it;
r[*it] = nod;
return true;
}
return false;
}
int main() {
freopen("cuplaj.in", "r", stdin);
freopen("cuplaj.out", "w", stdout);
int n, m, k;
cin>>n>>k>>m;
while (m--) {
int a, b;
cin>>a>>b;
lv[a].push_back(b);
}
int ret = 0;
bool ok = true;
while (ok) {
ok = false;
memset(viz, false, sizeof(viz));
for (int i = 1; i <= n; ++i)
if (!l[i] && cupleaza(i)) {
ok = true;
ret++;
}
}
cout<<ret<<endl;
for (int i = 1; i <= n; ++i)
if (l[i])
cout<<i<<" "<<l[i]<<endl;
return false;
}