Pagini recente » Cod sursa (job #193580) | Cod sursa (job #2975650) | Cod sursa (job #2558437) | Cod sursa (job #1303211) | Cod sursa (job #2082242)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
const int N = 10005;
vector <int> edge[N];
int L[N], R[N], used[N];
bool match(int node){
if(used[node] == true){
return 0;
}
used[node] = true;
for(auto it : edge[node]){
if(R[it] == 0){
L[node] = it;
R[it] = node;
return 1;
}
}
for(auto it : edge[node]){
if(match(R[it])){
L[node] = it;
R[it] = node;
return 1;
}
}
return 0;
}
int main(){
int n, m, e;
fin >> n >> m >> e;
for(int i = 1;i <= e;i++){
int x, y;
fin >> x >> y;
edge[x].push_back(y);
//edge[y].push_back(x);
}
int ans = 0;
for(bool ok = true;ok;){
ok = false;
for(int i = 1;i <= n;i++){
used[i] = 0;
}
for(int i = 1;i <= n;i++){
if(L[i] == 0){
if(match(i)){
ok = true;
ans++;
}
}
}
}
fout << ans << '\n';
for(int i = 1;i <= n;i++){
if(L[i]){
fout << i << ' ' << L[i] << '\n';
}
}
return 0;
}