C:杭电大HDU1232畅通工程(并查集)(已通过测试)

杭电大畅通工程
#include
#include
int pro[1000];
int b[1000]={0};
int m,n,i=0,t=0,jieguo1,jieguo2,s1,s2;
int count=0;
void mix(int m,int n)
{
    pro[m]=n;  	
};
int find(int m)
{   int r=m;
    while(pro[r]!=r)
	{
		r=pro[r];
	}
    int i=m,j;  
    while(pro[i]!=r)  
    {  
        j=pro[i];  
        pro[i]=r;  
        i=j;  
    }  
	return r;		
};
int main()
{
	while(scanf("%d %d",&s1,&s2)&&s1)
    {   
        memset(b,0,100*sizeof(int));
		for(t=1;t<=s1;t++)
        {
        	pro[t]=t;
        }
        for(i=1;i<=s2;i++)
		{
			scanf("%d %d",&m,&n);
			jieguo1=find(m);
			jieguo2=find(n);
			if(jieguo1!=jieguo2)
			{
				mix(jieguo1,jieguo2);
			}
		}
		for(i=1;i<=s1;i++)	
    	   b[find(i)]=1;
    	for(count=0,t=1;t<=s1;t++)
    	   if(b[t])   count++; 
    	printf("%d\n",count-1);
    }


	return 0;
	
	
	
}


你可能感兴趣的:(c语言,杭电,数据结构)