
并查集的题目
cdsdxcaq
这个作者很懒,什么都没留下…
展开
-
POJ1988 Cube Stacking
解题思路:这个题目和poj1182一样都是种类并查集的扩展应用,不过这个题中,并没有类的概念。我们做的时候就是把有关系的节点划分在一个集合。他们的关系是通过节点和他的父亲节点的距离来维系的。就像1182那题,关系是通过吃与被吃来维系一样。我的看法:我开始做这题的时候,把题目意思理解为从一个栈一到另一个栈的移动,是按照出栈顺序来移动的,然后我做的时候就对每个节点添加了一个属性为moveTimes原创 2012-07-13 17:21:30 · 660 阅读 · 0 评论 -
POJ1611
解题思路:这个题目就是一般的并查集的应用,题目要我们求的就是0所在的集合的元素的个数。我的做法就是为每个节点添加一个childNum,表示所在树的节点的数目。应注意事项:我开始在用Union(p,q)时,没有用条件p!=q导致的后面结果出错。后来改了就ok了。Source Code#include#include#includeusing namespace std;con原创 2012-07-13 10:08:39 · 336 阅读 · 0 评论 -
POJ1703
解题思路:这题是典型的种类并查集,我的做法是为每个节点添加一个属性diff,表示和他不在一个帮派的人的号码。每次有A的时候,看他们的根节点是不是相同的,如果相同,就说明在同一帮派。如果不同,在看和第一个根节点不在同一帮派的节点的父节点是不是第二个根节点,如果是,就说明他们在不同帮派。否则就不确定。 每次有D的时候,如果两个节点diff值为0,就把相应的值赋给diff。否则,就把和他们不同的帮派合并原创 2012-07-13 12:21:05 · 959 阅读 · 0 评论 -
POJ1182并查集的应用
我的想法:这个题目是并查集的拓展应用,我是看了POJ上并查集题目的归类中有这个题目,我就开始做了。我拿起这题的想法,就是把同一种类的动物归结在一起,然后如果后面得到的某一个动物的种类和之前得到的种类不同,就说明他说了假话。然后我朝着这个方向想,我开始的想法是,如果遇到2,x,y这种情况,就把x化为第一类,y为第二类。但后面就有问题了,比如后面又有2,x,y。那x属于哪一类呢,这个是很难划分的,因为原创 2012-07-12 17:38:49 · 317 阅读 · 0 评论 -
POJ1308
解题思路:这个题目要我们判断所给图是不是树,这里可以把条件转化为:1.图中没有环;2,图中每个节点除了根节点的入度都为1,根节点入度为0;没有环和入度不大于1,可以更具kruskal的并查集思想判断。我做这题时忽略了只有一个节点是根节点,判断方法是根据每条边的起始点所在树的根节点来判断,如果每个边的起始点的根节点都相同,就是树,否则,不是树;#include#include#inclu原创 2012-07-12 22:19:32 · 380 阅读 · 0 评论 -
POJ1456
解题思路:这个题目的思路是1:贪心+堆优化;2:贪心+并查集优化。我这里用的是并查集优化。首先是把产品按照它的利润由大到小排好序,然后依次将产品在离他的deadline最近的一天内卖出。在这里用并查集,是把连续占用的天数看成一个集合,而他们的根节点就是离他们最近的左边的未占用的一天。这样要找到产品的销售日,就找到它的根节点就好了。如果根节点为-1,就说明这个产品无法卖出。否则,就把i和find(i原创 2012-07-15 23:54:27 · 758 阅读 · 0 评论 -
POJ1733离散化(未很好解决)+并查集
解题思路:这题的思路和食物链的那题的思路差不多,就是利用了种类并查集,在一个种类里面维系的是节点和它的父亲节点之间的1的个数的奇偶性。处理的区间是(a-1,b].然后再利用并查集之前要对数据离散化,我离散化的方法是直接排序后在利用二分查找。这里肯定有好的离散化的方法,还有待解决。Source Code#include#include#include#include#includ原创 2012-07-21 01:17:14 · 434 阅读 · 0 评论 -
poj1417DP+并查集
解题思路:当是yes时,两个是同一种类,当是no时,两个在不同种类。我开始做的时候把同一种类的分在一起,就形成了一些集合。然后想法是利用dp求出p的划分方法数,如果为1,就说明可以判断。但后来遇到了问题,因为有些集合是不能分在一起的。这样就出现了问题。于是我就按照有关系的人把他划分在一起,这也是种类划分方法,然后形成了一些集合,对p进行划分时,都是选取集合中的一种类型。如果选取方式只有一种,则说明原创 2012-07-21 19:55:26 · 299 阅读 · 0 评论