Pagini recente » Cod sursa (job #295611) | Cod sursa (job #729316) | Cod sursa (job #2936386) | Cod sursa (job #791396) | Cod sursa (job #2137692)
#include <bits/stdc++.h>
using namespace std;
ifstream F("cuplaj.in");
ofstream G("cuplaj.out");
int n, m, k, ans, viz[10005], right_pair[10005], left_pair[10005], ok, x, y;
vector<int> a[10005];
int Match(int nod){
viz[nod] = 1;
for(auto it: a[nod]){
if(!left_pair[it]){
ans++;
left_pair[it]=nod;
right_pair[nod]=it;
return 1;
}
}
for(auto it: a[nod]){
if(!viz[left_pair[it]] && Match(left_pair[it])){
left_pair[it]=nod;
right_pair[nod]=it;
return 1;
}
}
return 0;
}
int main()
{
F >> n >> m >> k;
for(int i = 1; i <= k; ++ i){
F >> x >> y;
a[x].push_back(y);
}
ok = 1;
while(ok){
ok = 0;
memset(viz, 0, sizeof(viz));
for(int i = 1; i <= n; ++ i)
if(!right_pair[i]&&Match(i)) ok = 1;
}
G << ans<<'\n';
for(int i = 1; i <= n; ++ i)
if(right_pair[i]) G << i << " " << right_pair[i] << '\n';
return 0;
}