Pagini recente » Cod sursa (job #1950032) | Cod sursa (job #1683644) | Cod sursa (job #1104233) | Cod sursa (job #256900) | Cod sursa (job #2173019)
#include <bits/stdc++.h>
using namespace std;
ifstream F("cuplaj.in");
ofstream G("cuplaj.out");
int n, m, k, left_pair[10005], right_pair[10005], x, y, ok, ans;
vector<int>a[10005];
bitset<10005> v;
int Match(int x){
v[x]=1;
for(auto it:a[x]){
if(!left_pair[it]){
ans++;
left_pair[it] = x;
right_pair[x]=it;
return 1;
}
}
for(auto it:a[x]){
if(!v[left_pair[it]]&&Match(left_pair[it])){
left_pair[it] = x;
right_pair[x]=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);
}
while(!ok){
ok = 1;
v=0;
for(int i = 1; i <= n; ++ i)
if(!right_pair[i]&&Match(i)) ok=0;
}
G << ans << '\n';
for(int i = 1; i <= n; ++ i){
if(right_pair[i]) G<< i <<" "<<right_pair[i]<<'\n';
}
return 0;
}