hdu 1232 畅通工程

来源:互联网 发布:开源cms系统排名 java 编辑:程序博客网 时间:2024/04/30 04:10

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

可以使用并查集解决,每一堆隶属于一个结点的点相当于一个新点,因为只要能到达其中一个就能到达这个集合中所有的点。

AC代码:

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int n,m,father[1010];void Init(){for(int i=0; i<=n; i++)father[i] = i;}int Find(int x){if(x != father[x])father[x] = Find(father[x]);return father[x];}int main(){while(scanf("%d%d",&n,&m) == 2){if(!n) break;Init();for(int i=0; i<m; i++){int u,v;scanf("%d%d",&u,&v);int uu = Find(u), vv = Find(v);father[uu] = vv;}int cnt = 0;for(int i=1; i<=n; i++)if(father[i] == i) cnt++;cnt--;printf("%d\n",cnt);}return 0;}


0 0
原创粉丝点击