Pagini recente » Cod sursa (job #541427) | Cod sursa (job #2907580) | Cod sursa (job #2283649) | Cod sursa (job #2841635) | Cod sursa (job #1612977)
#include <fstream>
#include <vector>
#include <cstring>
#define dim 200005
using namespace std;
ifstream fin("cuplaj.in");
ofstream fout("cuplaj.out");
int n,i,j,Left[dim],Right[dim],m,viz[dim],a,b,ok,e,sol;
vector<int> v[dim];
int cuplaj(int nod){
viz[nod]=1;
for(int i=0; i<v[nod].size();i++){
int vecin = v[nod][i];
if(Right[vecin]==0){
Left[nod]=vecin;
Right[nod]=nod;
return 1;
}
}
for(int i=0; i<v[nod].size();i++){
int vecin = v[nod][i];
if(viz[Right[vecin]]==0 && cuplaj(Right[vecin])){
Left[nod]=vecin;
Right[vecin]=nod;
return 1;
}
}
return 0;
}
int main(){
fin>>n>>m>>e;
for(i=1;i<=e;i++){
fin>>a>>b;
v[a].push_back(b);
}
ok=1;
while(ok==1){
ok=0;
memset(viz,0,sizeof(viz));
for(i=1;i<=n;i++){
if(Left[i]==0 && cuplaj(i)){
ok=1;
sol++;
}
}
}
fout<<sol<<"\n";
for(i=1;i<=n;i++){
if(Left[i]!=0){
fout<<i<<" "<<Left[i]<<"\n";
}
}
return 0;
}