并查集
double1994
这个作者很懒,什么都没留下…
展开
-
HDOJ 3038 How Many Answers Are Wrong
并查集的题,纠结了一段时间...设置一个数组记录到根节点的总和,在输入数据后记得把一边的端点向外扩展1,不然会出现sum2-sum1=v1+v2;sum2-sum2=0;的矛盾;每次输入都以左端的根节点为0位置,不断更新,只要不出现同一集合中已有位置差与输入位置差不同的情况都是正确的,一开始老是想着以最左端的为起点,其实没有影响。而最初考虑是否会出现前面某段集合的和大于后面的某个位置和是错误情况,原创 2013-08-08 11:15:17 · 527 阅读 · 0 评论 -
POJ 1988Cube Stacking
一开始这题完全没有想法,后来又看题解,不懂...慢慢磨了两天左右,终于写出来了。 并查集的题,由于要输出当前标号方块下面的方块数,需要处理下。每次更新当前根节点下方块数目P为目标栈中方块数R,更新目标栈中方块数,合并栈。 查询时找出当前方块所有根节点的下方方块数P,记录下总和即为输出数据,同时将查询点根节点直接更新为当前栈最下方的根节点。当前点下方方块数目为输出的总和。此处不更新将超时 附代原创 2013-08-06 11:49:28 · 480 阅读 · 0 评论 -
POJ 1308 Is It A Tree?
并查集水题,刚开始做并查集,错误有点多...交20+发,大多RE。以下为代码,注意的地方已标出 #include #include #include #include #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b)) #define INF 1000000000 #define max_N 100005 i原创 2013-08-03 21:10:38 · 472 阅读 · 0 评论 -
3635 Dragon Balls
并查集的题,刚开始学,卡题卡的厉害...看题解过的。需要输出龙珠转移次数,可以每次更新当前根节点的次数。最后需要输出转移次数时,加上当前龙珠记录的次数加上其所有根节点的次数即为转移次数。理解的不是很透彻,略蛋疼。#include #include #include #include #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(原创 2013-08-05 20:19:55 · 469 阅读 · 0 评论 -
Ural 1671 Anansi's Cobweb
并查集水题,倒序进行即可。很久没写并查集了,写的极挫。 #include #include #include #include using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define N 100005 int r[N][2]; int d[N]; int par[N]; int a[N];原创 2013-10-18 19:07:13 · 585 阅读 · 0 评论