Cod sursa(job #159465)

Utilizator FlorinC1996Florin C FlorinC1996 Data 14 martie 2008 10:17:27
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<stdio.h>   
long start[100005],k,n,m,v[2][400010];   
short al[100005];   
long bf[100005];   
  
int main()   
{freopen("dfs.in","r",stdin);   
 freopen("dfs.out","w",stdout);      
 scanf("%ld%ld",&n,&m);   
 long i,x,y;   
 for(i=1;i<=m;i++)   
    {    
     scanf("%ld%ld",&x,&y);   
     v[1][++k]=x;   
     v[0][k]=start[y];   
     start[y]=k;   
     v[1][++k]=y;   
     v[0][k]=start[x];   
     start[x]=k;   
     }   
    
 k=1;   
 long auxk=k,last=2;   
 short sem=1;   
 bf[1]=1;   
 al[1]=1;   
 long comp=0;   
 while(sem)   
    {while(auxk<=k && k<n)   
        {for(i=start[bf[auxk]];i!=0;i=v[0][i])   
            if(al[v[1][i]]==0) {bf[++k]=v[1][i];al[v[1][i]]=1;}   
         auxk++;   
        }   
     comp++;   
     if(k==n) sem=0;   
     else for(i=last;i<=n;i++) if(al[i]==0) {bf[++k]=i;al[i]=1;auxk=k;last=i+1;i=n+1;}   
    }   
 printf("%ld",comp);   
   
 return 0;   
}