并查集
jiangjiashi
这个作者很懒,什么都没留下…
展开
-
(两种解法)a Bug's life(P2492)
两种解法效率上差不多的,都是才学的,,看的。 解一,这个一开始多写了一个break就悲剧了,,,, #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace原创 2012-04-25 17:04:02 · 366 阅读 · 0 评论 -
简单的更新
题意:有N个物体,要比较两者重量的差别 1、! i j v 表示j 比 i 重v 2、? i j 询问j 比i 重多少 思路:用并查集,每次查找 更新到更短的路径,并更新当前结点值。 合并得要计算好两个相对父节点的值。 #include #include usin原创 2013-05-10 21:22:40 · 673 阅读 · 0 评论 -
(久违的一道题) 食物链 (P1182)
这个题,经过了很长一段时间,其中做了很多次,都没有做出来。 当初看别人的程序都看不到懂,所以直接就不看别人的,就自己写, 这样慢慢地自己就克服了一些关键点,慢慢地了解到了其各种关系, 最后还是有幸地做出来了。很高兴。不过有一种弱暴了的感觉 #include #include #include #include #include using namespace原创 2012-12-28 19:33:54 · 451 阅读 · 0 评论 -
Is It A Tree? (P1308)
做出很久以前没有做出来的题的感觉真爽。 题意:判断是否是树,满足条件(1、只有一个根;2、每一个儿子只有一个父亲;3、不能自己是自己的父亲;4、两父子不能重复) 思路:用并查集记录每一个点的父亲。 特别注意:如果有圈,普通的并查集会出现打圈,死循环(现象是:Memorry Exceeded) 解决方法:用rank[ ]记录每一个结点记录大概当了多少次父亲原创 2012-07-30 01:54:42 · 1370 阅读 · 0 评论 -
Constructing Roads (P2421)
这个题做得比较曲折,自己重作了很多次,也修改了很多次。还好知道自己哪 错了,应该注意到什么。 意思:给出各点之间的距离,再给出一些点已经修好路,问再最少修多少的路可以使全部点连通(最小生成树的变形) 思路:刚开始我就是kruskal +并查集,可是有问题。毅然决定prim+并查集,还是错。后来才发现是优先性上出了 一点问题。其中 prim中先把已经连通的点先原创 2012-07-30 00:42:24 · 476 阅读 · 0 评论 -
(easy) Ubiquitous Religion (P2524)
#include //#include using namespace std; //freopen("C://i.txt","r",stdin); #define N 50001 int f[N]; int n,m; int ans[N]; int find(int k) { if (k==f[k]) return k; return f[k]=find(f[k]); }原创 2012-07-29 18:17:41 · 362 阅读 · 0 评论 -
(简单) The Suspects (P1611)
#include #include #include #include #include #include #include #include #include #include #include using namespace std; int n; int go[30000]; bool vist[30000]; int ans; int m; int find(int k)原创 2012-07-24 11:30:22 · 338 阅读 · 0 评论 -
Find them,catch them(P1703)
这个转移的状态还是要注意仔细想一下, #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define N 100010 int f[2*N原创 2012-04-25 15:43:39 · 490 阅读 · 0 评论 -
Network(P1861)
刚开始用prim,,加pre[ ]的方法一直WA,后来改用这个方法, #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define N 150001 struct原创 2012-04-25 18:36:09 · 399 阅读 · 0 评论 -
二维并查集
题意:有一个N*M的建筑物,第一个建筑物的高度可能不等。现在给出T天, 每一天的水都上涨,第i天的水位为T[i], 求每天水把这些建筑物分成几块。 思路:这个二维并查集的名字,其实是自己取的。 思想是并查集的思想,只是用到二维上面。所以要用一个结构体来实现。 做原创 2013-05-11 14:41:24 · 2692 阅读 · 0 评论