HDU 1232 并查集/dfs
2015-11-10 18:03
183 查看
原题:
http://acm.hdu.edu.cn/showproblem.php?pid=1232
我的第一道并查集题目,刚刚学会,我是照着《啊哈算法》这本书学会的,感觉非常通俗易懂,另外还有一篇同样非常好的博客:http://blog.csdn.net/niushuai666/article/details/6662911
这两位大神已经把并查集讲解的非常透彻了,所以我就不班门弄斧了。。。
刚开始看到这道题的时候,我并不知道这里是怎么用到并查集的,可以说我对并查集的理解还不是很到位。看了上面那篇博文后才算有点明白了,并查集的本质就是维护一个森林,适合来解决一个图有几个连通分支的问题。
我刚开始是用深度优先搜索做的,和并查集的本质其实是一样的,就是先存储整个图,然后对每个节点进行深度优先搜索,这个每一次的搜索过程,就是对这个节点所扩展出的独立分支就行遍历,把所到之处的每一个节点进行标记,好下次不再访问已经访问过的节点。最后,我们统计总共进行深搜的次数,这就是对应着有几个独立的分支。当然,这个方法效率并不如并查集高,但也算是为大家提供了另一个思路吧(^_^)
深搜:
View Code
http://acm.hdu.edu.cn/showproblem.php?pid=1232
我的第一道并查集题目,刚刚学会,我是照着《啊哈算法》这本书学会的,感觉非常通俗易懂,另外还有一篇同样非常好的博客:http://blog.csdn.net/niushuai666/article/details/6662911
这两位大神已经把并查集讲解的非常透彻了,所以我就不班门弄斧了。。。
刚开始看到这道题的时候,我并不知道这里是怎么用到并查集的,可以说我对并查集的理解还不是很到位。看了上面那篇博文后才算有点明白了,并查集的本质就是维护一个森林,适合来解决一个图有几个连通分支的问题。
我刚开始是用深度优先搜索做的,和并查集的本质其实是一样的,就是先存储整个图,然后对每个节点进行深度优先搜索,这个每一次的搜索过程,就是对这个节点所扩展出的独立分支就行遍历,把所到之处的每一个节点进行标记,好下次不再访问已经访问过的节点。最后,我们统计总共进行深搜的次数,这就是对应着有几个独立的分支。当然,这个方法效率并不如并查集高,但也算是为大家提供了另一个思路吧(^_^)
深搜:
#include<stdio.h> #define maxn 1005 int n,m; int f[maxn]; int getf(int a){ if(f[a]==a){ return a; }else{ f[a] = getf(f[a]); return f[a]; } } //合并函数 void merge(int u,int v){ int t1 = getf(u); int t2 = getf(v); if(t1!=t2) f[t2] = t1; } int main(){ while(scanf("%d",&n)!=EOF&&n){ scanf("%d",&m); //初始化每个节点 for(int i = 1;i<=n;i++) f[i] = i; for(int i = 0;i<m;i++){ int u,v; scanf("%d%d",&u,&v); merge(u,v); } int sum = 0; for(int i = 1;i<=n;i++) if(f[i]==i) sum++; printf("%d\n",sum-1); } return 0; }
View Code
相关文章推荐
- 《需求分析与系统设计》第一篇阅读体会
- 将指定SQL的执行计划从共享池删除的方法
- 外企到底要招聘什么样的人
- 【Java】HashMap 和 HashTable 的区别到底是什么?
- Android Jni 多线程 蓝牙串口收发 实例 一
- Hadoop多输入源、多作业链协作
- [Android开发]屏幕适配问题
- 职员)2015-11-10 星期二 日志
- LCS(Longest Common Subsequence 最长公共子序列)
- linux用户与用户组
- 雷鸟将邮件自动接收到新建的文件夹中
- Activity管理类
- Elasticsearch删除所有数据
- JavaSript模块规范 - AMD规范与CMD规范介绍
- 黑马程序员--C语言基础--指针
- cell separator line 不能到头
- JAVA打印正弦图形
- iOS Project和target
- QTime获取当前时间,QDateTime获取日期和时间,QTimer定时器,QLCDNumber数码显示框
- expire_logs_day binlog自动过期清理binlog