Pagini recente » Cod sursa (job #3136719) | Cod sursa (job #1029712) | Cod sursa (job #2977158) | Cod sursa (job #34306) | Cod sursa (job #188205)
Cod sursa(job #188205)
#include<stdio.h>
#include<string.h>
int a[255][255],i,j,n,dr[255],st[255],viz[255],nr,m,r[255][255],u[255];
int cupl(int nod){
int i;
if(viz[nod])
return 0;
viz[nod]=1;
for(i=1;i<=n;i++)
if(a[nod][i])
if(!dr[i]||cupl(dr[i])){
st[nod]=i;
dr[i]=nod;
return 1;
}
return 0;
}
void cuplaj(){
for(i=1;i<=n;i++)
if(!st[i])
if(cupl(i))
nr++;
else{
memset(viz,0,sizeof(viz));
if(cupl(i))
nr++;
}
}
int main(){
freopen("strazi.in","r",stdin);
freopen("strazi.out","w",stdout);
scanf("%d %d",&n,&m);
for(;m;m--){
scanf("%d %d",&i,&j);
a[i][j]=1;
}
cuplaj();
nr=n;
while(nr){
for(i=1;i<=n;i++)
if(!u[i]&&!dr[i])
break;
r[++m][0]=1;
r[m][1]=i;
u[i]=1; nr--;
while(st[i]){
i=st[i];
r[m][++r[m][0]]=i;
u[i]=1;nr--;
}
}
printf("%d\n",m-1);
for(i=1;i<m;i++)
printf("%d %d\n",r[i][r[i][0]],r[i+1][1]);
for(i=1;i<=m;i++)
for(j=1;j<=r[i][0];j++)
printf("%d ",r[i][j]);
fclose(stdin);
fclose(stdout);
return 0;
}