Pagini recente » Cod sursa (job #704716) | Cod sursa (job #2828694) | Cod sursa (job #2001342) | Cod sursa (job #1486841) | Cod sursa (job #2377264)
#include <bits/stdc++.h>
#define NMAX 10005
using namespace std;
bool viz[NMAX];
vector<vector<int> > graph = vector<vector<int> >(NMAX, vector<int>());
int dr[NMAX], st[NMAX];
int sol = 0;
bool cuplaj(int nod){
if(viz[nod]==true) return false;
viz[nod] = true;
for(auto& vec:graph.at(nod)){
if(dr[vec]==0){
dr[vec] = nod;
st[nod] = vec;
sol++;
return true;
}
}
for(auto& vec:graph.at(nod)){
if(cuplaj(dr[vec])==true){
dr[vec] = nod;
st[nod] = vec;
return true;
}
}
return false;
}
int main()
{
int a, b, e, x, y;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
fin>>a>>b>>e;
for(int i=1; i<=e; i++){
fin>>x>>y;
graph.at(x).push_back(y);
}
bool ok;
do {
ok = false;
for(int i=1; i<=a; i++) viz[i] = false;
for(int i=1; i<=a; i++)
if(st[i]==0)
ok = ok|cuplaj(i);
}while(ok);
fout<<sol<<endl;
for(int i=1; i<=a; i++){
if(st[i]) fout<<i<<" "<<st[i]<<endl;
}
}