HDOJ 1232 畅通工程 杭电 ACM

并查集原始题 看懂PPT上代码后空手练的

寻根函数用了递归但未超时


#include
int n,m,i,p[1001],a,b,cnt;
int rt(int x){return p[x]==x?x:rt(p[x]);}
void f(int a,int b){
    int x=rt(a),y=rt(b);
    if(x!=y)p[x]=y;
}
int main(){
    while(scanf("%d%d",&n,&m),n){
        for(i=1;i<=n;++i)p[i]=i;
        while(m--)scanf("%d%d",&a,&b),f(a,b);
        for(cnt=0,i=1;i<=n;++i)
            if(p[i]==i)cnt++;
        printf("%d\n",cnt-1);
    }
}


你可能感兴趣的:(ACM,HDOJ,HDOJ,ACM)