hdu 1232 并查集

来源:互联网 发布:win10电脑优化 编辑:程序博客网 时间:2024/05/17 07:03
点击打开链接http://acm.hdu.edu.cn/showproblem.php?pid=1232
#include <stdio.h>#define M 1010int par[M];int find(int x){int k,t,y;k=x;while(par[x]!=x){x=par[x];}while(k!=x)  //路径压缩 {//  把所有的中间节点 加入到根节点的直接后继 y=par[k];par[k]=x;k=y;}return x;}void join(int a,int b){int x,y;x=find(a);y=find(b);par[y]=x; //老大合并 }int main(){int n,e,a,b,i,ans,x,y;while(scanf("%d",&n)&&n) {scanf("%d",&e);ans=0;for(i=1;i<=n;i++){par[i]=i;}while(e--){scanf("%d%d",&a,&b);join(a,b);}for(i=1;i<n;i++){if(find(i)!=find(i+1)){ans++;join(i,i+1);}}printf("%d\n",ans);}return 0;}

0 0
原创粉丝点击