Pagini recente » Cod sursa (job #831371) | Cod sursa (job #2817541) | Cod sursa (job #82145) | Cod sursa (job #51390) | Cod sursa (job #1451628)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 10001
#define MAXE 100001
int next[MAXE],ind[MAXN],y[MAXE],vizb[MAXN],vizf[MAXN],flag=1,con;
int parcurge(int nod){
int p,aux;
p=ind[nod];
while(p>0&&vizf[y[p]]>0)
p=next[p];
if(p==0){
p=ind[nod];
while(p>0&&vizf[y[p]]>0){
aux=vizf[y[p]];
vizf[y[p]]=con;
if(aux!=con&&parcurge(aux)==1){
vizf[y[p]]=nod;
vizb[nod]=y[p];
return 1;
}
p=next[p];
}
return 0;
}
else{
vizb[nod]=y[p];
vizf[y[p]]=nod;
return 1;
}
}
int main(){
FILE*fi,*fout;
int i,n,m,x,e;
fi=fopen("cuplaj.in" ,"r");
fout=fopen("cuplaj.out" ,"w");
fscanf(fi,"%d%d%d" ,&n,&m,&e);
for(i=1;i<=e;i++){
fscanf(fi,"%d%d" ,&x,&y[i]);
next[i]=ind[x];
ind[x]=i;
}
con=1;
while(flag){
flag=0;
for(i=1;i<=n;i++)
if(vizb[i]==0)
flag=parcurge(i);
con++;
}
con=0;
for(i=1;i<=n;i++)
if(vizb[i]>0)
con++;
fprintf(fout,"%d\n" ,con);
for(i=1;i<=n;i++)
if(vizb[i]>0)
fprintf(fout,"%d %d\n" ,i,vizb[i]);
fclose(fi);
fclose(fout);
return 0;
}