HDU 1232 畅通工程(纯并查集)

来源:互联网 发布:国服魔兽世界mac版 编辑:程序博客网 时间:2024/05/17 03:57

题目:

http://acm.hdu.edu.cn/showproblem.php?pid=1232

题解:
纯并查集,此题相当于算可以实现交通集合的个数,第一个数据,1-3 4-3相连,就有两个各自互相连通的集合,1-3-4、2,需要建的道路为连通集合个数减1.

代码:

#include<cstdio>#include<cstring>int fa[1001];bool visit[1001];int find(int a){return fa[a]==a?a:fa[a]=find(fa[a]);}int main(){int N,M;while(~scanf("%d",&N)){if(N==0) return 0;scanf("%d",&M);int i;for(i=1;i<=N;i++){fa[i]=i;}memset(visit,0,sizeof(visit));for(i=1;i<=M;i++){int a,b;scanf("%d%d",&a,&b);int a_boot,b_boot;a_boot=find(a);b_boot=find(b);if(a_boot!=b_boot){fa[a_boot]=b_boot;}}int ans=0;for(i=1;i<=N;i++){int i_boot=find(i);if(visit[i_boot]==0){ans++;visit[i_boot]=1;}}printf("%d\n",ans-1);}return 0;}


0 0
原创粉丝点击