
并查集
林伏案
妖蛾子良多的范老爷
展开
-
poj1988
/* solution: 并查集 note: 注意每次调用getParent都要更新under数组。这是最容易出错的地方! 由于路径的压缩,所以每次更新under时都相当与沿着路径更新。 date: 2016.8.17 */ #include #include #include using namespace std; const int maxn = 30000+5; in原创 2016-08-17 20:03:38 · 253 阅读 · 0 评论 -
poj1182
/* translation:中文题 solution: 并查集 本题除了需要维护相同集合的这个关系外还需要维护不同集合间的关系,如果像图论那样开个数组来 维护集合之间的关系会MLE。所以需要在并查集上进行改造使其能够表示不同集合之间的关系。方法 如下:因为总共只有三个大的集合,只是不知道每个元素属于这三个集合中的哪一个,所以并查集中 的元素形式可以改变成i~a,表示i号元素属于a集合。原创 2016-08-31 10:13:24 · 211 阅读 · 0 评论 -
poj1703(并查集维护不同集合关系的方法)
/* translation: 已知所有元素要么属于第一个集合,要么属于第二个集合,给出两种操作。第一种是D a b,表示 a,b两个元素不在一个集合里面。第二种操作是A a b,表示询问a,b两个元素是否在同一个集合 里面。如果不能确定的话打印not sure。否则给出答案。 solution: 并查集。 这道题有点类似poj1182(食物链),两题的关键点都在于如何维护不同集合的关系原创 2016-10-17 20:48:45 · 3055 阅读 · 6 评论 -
poj2236(并查集)
/* translation: 多个电脑连成一个网络,给出修复和查询两种操作。输出每次查询两台电脑是否能够通信的结果 solution: 并查集简单应用即可 note: 注意输入。 date: 2016.10.17 */ #include #include #include #include #include using namespace std; const int max原创 2016-10-17 22:10:17 · 319 阅读 · 0 评论 -
aoj2170(并查集操作更改)
/* translation: 给出一棵树,根节点为1。一开始只有根节点被标记。现在有两种操作,一种是查询某一节点最近的一个标记 父节点,另外是将某一节点标记。求所有查询父节点下标的和。 solution: 按照题意,依次父节点遍历即可。 note: #这道题一开始被归类为并查集,害得我想了半天。并查集的路径压缩会破坏树的父子节点的关系而此题又要 维护父子节点的关系,形成矛盾。后来想可不原创 2016-10-19 22:50:29 · 322 阅读 · 0 评论