Pagini recente » Cod sursa (job #2915427) | Cod sursa (job #1468749) | Cod sursa (job #2897430) | Cod sursa (job #2470871) | Cod sursa (job #750451)
Cod sursa(job #750451)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<int> graf[10003],l(10003,0),r(10003,0);
int n1, n2, m;
vector<bool> viz;
bool cuplaj(int x){
if(viz[x]) return false;
viz[x]=true;
for(vector<int>::iterator it=graf[x].begin();it!=graf[x].end();it++)
if (!r[*it]){
r[*it]=x;
l[x]=*it;
return true;
}
for(vector<int>::iterator it=graf[x].begin();it!=graf[x].end();it++)
if(cuplaj(r[*it])){
r[*it]=x;
l[x]=*it;
return true;
}
return false;
}
int main(){
int a,b,card_cuplaj=0;
fin>>n1>>n2>>m;
for(int i=1;i<=m;i++){
fin>>a>>b;
graf[a].push_back(b);
}
bool exista=true;
while (exista){
exista=false;
viz=vector<bool>(10003,0);
for (int i=1;i<=n1;i++)
if(l[i]==0 && cuplaj(i)==true){
card_cuplaj++;
exista=true;
}
}
fout<<card_cuplaj<<"\n";
for (int i=1;i<=n1;i++)
if(l[i]) fout<<i<<" "<<l[i]<<"\n";
return 0;
}