hdu 1232畅通工程
2016-03-23 17:40
274 查看
这是一个比较简单的并查集题目。我们把每一片城区看做一个集合(图的一个连通集),然后统计一共有k个集合,连接两个集合需要1条边,从而整个需要 k-1条边。
#include<iostream> using namespace std; #define MAX_SIZE 1000 int parent[MAX_SIZE]; int findParent(int i); void Union(int i, int j); int main(){ int i, j,k, n, e,ans; while (scanf("%d",&n)&&n){ scanf("%d",&e); memset(parent, -1, sizeof(parent)); for (k = 0; k < e; k++){ scanf("%d%d",&i,&j); Union(i, j); //合并i与j所在的集合 } ans = 0; for (i = 1; i <= n;i++) //统计有多少个集合(连通集) if (parent[i] ==-1) ans++; printf("%d\n", ans-1); } return 0; } int findParent(int i){ if (parent[i] == -1) return i; else return parent[i] = findParent(parent[i]); //状态压缩 } void Union(int i, int j){ i = findParent(i); j = findParent(j); if (i!=j) //如果不在同一集合就合并它们,这步不能省 parent[i] = j; }
相关文章推荐
- HBase shell命令整理
- 经典java笔试题(二)
- 【代码整理】JavaScript的寄生组合式继承
- mysql timestamp 值不合法问题
- pomelo的心跳响应与disconnect
- Android网络编程(一)
- Java语言编程的一些想法
- Cg入门26:Fragment shader –纹理混合动画
- 使用代码编辑器Sublime Text 3进行前端开发及相关快捷键
- mysql timestamp 值不合法问题
- mysql timestamp 值不合法问题
- Lucidpress | Free Design Tool(Web打印)
- Bzoj4361:isn:树状数组+动态规划+容斥
- mysql报错问题解决Character set 'utf8mb4' is not a compiled character set
- 经典java笔试题(一)
- 全面理解 Unity UI 系统
- Android对图片的各种平移,缩放,拖动
- 南阳题目100-1的个数
- Python os.path
- JMeter学习(八)JDBC Request