Pagini recente » Cod sursa (job #1456106) | Cod sursa (job #2543737) | Cod sursa (job #2509217) | Cod sursa (job #1895262) | Cod sursa (job #2970653)
#include <bits/stdc++.h>
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
using namespace std;
const int MAX = 1e5;
vector <int> g[2 * MAX + 1];
bool viz[2 * MAX + 1];
int p[2 * MAX + 1];
bool per(int nod){
viz[nod] = true;
for(int x: g[nod]){
if(p[x] == 0){
p[nod] = x;
p[x] = nod;
return true;
}
if(!viz[p[x]] && per(p[x])){
p[nod] = x;
p[x] = nod;
return true;
}
}
return false;
}
int main(){
int n, m, e, a, b;
in >> n >> m >> e;
for(int i = 1; i <= e; i++){
in >> a >> b;
b += n;
g[a].push_back(b);
g[b].push_back(a);
}
int cnt = 0;
bool ok;
do{
ok = false;
for(int i = 1; i <= n; i++){
if(!viz[i] && !p[i] && per(i)){
cnt++;
ok = true;
}
}
for(int i = 1; i <= n + m; i++){
viz[i] = false;
}
}while(ok);
out << cnt << '\n';
for(int i = 1; i <= n; i++){
if(p[i]){
out << i <<' '<< p[i] - n << '\n';
}
}
return 0;
}