Cod sursa(job #159002)

Utilizator corina23Ciobanu Corina corina23 Data 13 martie 2008 22:07:18
Problema Parcurgere DFS - componente conexe Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<fstream.h>
#include<stdio.h>
//ifstream f("date.in");
//ofstream g("date.out");
long start[100005],k,n,m,v[2][400005];
short al[100005],bf[100005];

int main()
{freopen("dfs.in","r",stdin);
 freopen("dfs.out","w",stdout);
 //f>>n>>m;
 scanf("%ld%ld",&n,&m);
 long i,x,y;
 for(i=1;i<=m;i++)
	{//f>>x>>y;
	 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;
	 }
 //long nv=k;
 k=1;
 long auxk=k;
 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=1;i<=n;i++) if(al[i]==0) {bf[++k]=i;al[i]=1;auxk=k;i=n+1;}
	}
 printf("%ld",comp);
 //f.close();
 //g.close();
 return 0;
}