并查集原始题 看懂PPT上代码后空手练的
寻根函数用了递归但未超时
#include<stdio.h>
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);
}
}