Pagini recente » Cod sursa (job #418635) | Cod sursa (job #1794732) | Cod sursa (job #2026683) | Cod sursa (job #862317) | Cod sursa (job #749648)
Cod sursa(job #749648)
#include<fstream>
#include<vector>
#include<algorithm>
#include<string.h>
#define max 10010
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector<int>G[max];
int w[max],s[max],d[max],n,m,M,CM,x,y,i,modif;
int cupleaza(int x){
if(w[x])
return 0;
w[x]=1;
for(int i=0;i<G[x].size();++i){
if(!d[G[x][i]]){
s[x]=G[x][i];
d[G[x][i]]=x;
return 1;
}
}
for(int i=0;i<G[x].size();++i){
if(cupleaza(d[G[x][i]])){
s[x]=G[x][i];
d[G[x][i]]=x;
return 1;
}
}
return 0;
}
int main (){
f>>n>>m>>M;
for(i=1;i<=M;++i){
f>>x>>y;
G[x].push_back(y);
}
modif=1;
do{
modif=0;
memset(w,0,sizeof(w));
for(i=1;i<=n;++i)
if(!s[i])
modif|=cupleaza(i);
}while(modif);
for(i=1;i<=n;i++)
if(s[i])
CM++;
g<<CM<<"\n";
for(i=1;i<=n;i++)
if(s[i]){
g<<i<<" "<<s[i]<<"\n";
}
return 0;
}