Pagini recente » Cod sursa (job #1882018) | Cod sursa (job #87306) | Cod sursa (job #3178134) | Cod sursa (job #1756428) | Cod sursa (job #2834657)
#include <iostream>
#include <fstream>
#include <vector>
#define Nmax 100001
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n, m, e, viz[Nmax], l[Nmax], r[Nmax], sol;
vector<int> la[Nmax];
int cuplaj(int x)
{
if(viz[x])
return 0;
viz[x] = 1;
for(auto y : la[x]){
if(r[y])
continue;
l[x] = y;
r[y] = x;
++ sol;
return 1;
}
for(auto y : la[x]){
if(cuplaj(r[y])){
l[x] = y;
r[y] = x;
return 1;
}
}
return 0;
}
int main()
{
int a, b;
fin >> n >> m >> e;
for(int i = 1; i <= e; ++ i){
fin >> a >> b;
la[a].push_back(b);
}
while(true){
fill(viz, viz + 1 + n, 0);
int r = 0;
for(int i = 1; i <= n; ++ i)
if(!l[i])
r += cuplaj(i);
if(!r){
break;
}
}
fout << sol << '\n';
for(int i = 1; i <= m; ++ i){
if(r[i]){
fout << r[i] << ' ' << i << '\n';
}
}
return 0;
}