Pagini recente » Cod sursa (job #270868) | Cod sursa (job #1629870)
#include <fstream>
#define DMAX 10005
#include <vector>
using namespace std;
vector <int> edges[DMAX];
int l_match[DMAX], vis[DMAX], r_match[DMAX];
int l, r, m, temp, a, b, sol;
int cupleaza(int varf){
int vecin;
if(vis[varf]) return false;
vis[varf] = 1;
for(int j = 0; j < edges[varf].size(); ++j){
vecin = edges[varf][j];
if(!l_match[vecin]){
r_match[varf] = vecin;
l_match[vecin] = varf;
return true;
}
}
for(int j = 0; j < edges[varf].size(); ++j){
vecin = edges[varf][j];
if(cupleaza(l_match[vecin])){
r_match[varf] = vecin;
l_match[vecin] = varf;
return true;
}
}
return false;
}
int main()
{
ifstream in("cuplaj.in");
ofstream out("cuplaj.out");
in>>l>>r>>m;
while(m--){
in>>a>>b;
edges[a].push_back(b);
}
temp = 1;
while(temp){
for(int i = 1; i <= l; ++i)
vis[i] = 0;
temp = 0;
for(int i = 1; i <= l; ++i){
if(!r_match[i] && cupleaza(i)){
sol++; temp = 1;
}
}
}
out<<sol<<"\n";
for(int i = 1; i <= l; ++i){
if(r_match[i])
out<<i<<" "<<r_match[i]<<"\n";
}
in.close();
out.close();
return 0;
}