Pagini recente » Cod sursa (job #2649275) | Cod sursa (job #46992) | Cod sursa (job #632570) | Cod sursa (job #1485568) | Cod sursa (job #750452)
Cod sursa(job #750452)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
vector<int> graf[10003],l,r;
int n1, n2, m;
bitset<10003> 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);
}
l=vector<int>(n1+3,0);
r=vector<int>(n2+3,0);
bool exista=true;
while (exista){
exista=false;
viz.reset();
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;
}