数据结构-并查集
你迎哥哥
这个作者很懒,什么都没留下…
展开
-
HDU 1116 Play on Words
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1116 题目意思:给出一些单词,玩单词接龙,如果能用完所有单词,则输出Ordering is possible.,否则输出The door cannot be opened. 算法分析:其实每个单词有用的部分只有首尾字母,每个单词相当于首字母指向未字母的一条有向边,一种可能是刚好是欧拉回路,另外原创 2015-05-04 22:08:00 · 552 阅读 · 0 评论 -
HDU 1213 How Many Tables
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 题目意思:给定n个点,每个点属于一个集合,再给定一些关系,合并有关系的点,问最后共有多少个集合。 并查集模板题。随便怎么搞 下面是AC代码: #include using namespace std; const int maxn=1005; int fa[maxn],Count原创 2015-05-04 22:12:55 · 407 阅读 · 0 评论 -
HDU 1272 小希的迷宫
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1272 并查集用来检测无向图的环是一个非常好的工具。 对于这道题,先要统计出有多少个顶点,假设有n个,再算出边的总数,如果n=m+1,那么满足题目要求。 关键是如果算出边数呢,而且算的同时又不能加那些会成环的边?我们可以用并查集维护,如果两个点有边相连,那么将它们连入同一个集合,并统计连入的边数,原创 2015-05-04 22:21:21 · 399 阅读 · 0 评论 -
HDU 1829 A Bug's Life
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1829 分组并查集典型例子。 具体可参考《挑战程序设计竞赛》并查集专题或POJ 食物链 #include #include #include #include #include #include #include #include #include #include #include #i原创 2015-05-07 23:05:36 · 485 阅读 · 0 评论 -
HDU 1558 Segment set
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1558 题目大意:询问与某条线段相交的线段有多少条,间接的也算。 算法分析,关键是求线段交点,如能判断线段是否相交,用并查集维护每个集合的个数就行了。 对于判断线段是否相交 这里并没有采用快速排斥+跨立实验,原因是采用那个不能求出线段交点。这里采用的方法是求出线段交点,然后判断交点是否都在两原创 2015-05-07 23:14:42 · 373 阅读 · 0 评论 -
HDU 2473 ( Junk-Mail Filter ) (并查集删除操作)
原本并查集是不支持删除操作的。但是我们可以开动脑筋实现这个功能,就是用一个辅助数组,因为fa数组万万是不能动它的。对着代码好好体会一下吧。 #include const int maxn=2000005; int fa[maxn],t[maxn],n,m,cnt,Hash[maxn]; int Find(int x) { if(x==fa[x]) return x; return原创 2015-08-25 15:26:50 · 339 阅读 · 0 评论 -
HDU 1598(并查集 kruskal思想)
kurskal的思想 #include #include using namespace std; const int maxn=100005; struct node { int from,to,len;}a[maxn]; int fa[maxn]; int Find(int x) { if(x==fa[x]) return x; return fa[x]=Find(fa[x]原创 2015-08-25 15:57:03 · 460 阅读 · 0 评论 -
HDU 1325 Is It A Tree?(并查集简单题)
题目链接 并查集简单题,利用并查集来判断无向图的环 #include using namespace std; const int maxn=1005; int fa[maxn],in[maxn],out[maxn],vis[maxn]; int Find(int x) { if(fa[x]==x) return x; return fa[x]=Find(fa[x]); } v原创 2015-08-25 15:20:59 · 314 阅读 · 0 评论 -
HDU 1856 More is better (并查集模板题)
统计各个集合元素个数,水、、、 #include #include #include using namespace std; const int maxn=10000005; int Fa[maxn],n,ans[maxn]; void init() { for(int i=0;i<maxn;i++) Fa[i]=i,ans[i]=1; } int Find(int x) {原创 2015-08-25 15:23:31 · 316 阅读 · 0 评论