摘要: 原题传送:http://poj.org/problem?id=1984 并查集。 首先,以为k个询问中的I是乱序的,直接被吓傻了,后来看讨论版才发现I是升序的…… 这道题让我对并查集有一个新的认识:根的代表性是非常强的!并查集里如果某个节点的改动会影响到整个并查集的所有节点,那么,在union_set的时候只需要改动根节点就可以了,当然,在find_set函数里要对所有节点进行更新(这相当于一种延时标记)。我们知道,find_set函数走了两条路,一条是前往根的路,一条是从跟返回的路,那么,如果发现根已经被改动,必须在从根返回的路上更新经过的所有节点。这在find_set函数里是可以... 阅读全文
posted @ 2012-09-07 15:20 芒果布丁 阅读(620) 评论(0) 推荐(1)
摘要: 原题传送:http://poj.org/problem?id=1703 并查集。 这题更加深了对并查集的理解,以前做过差不多的类似“朋友传递”的题。这道题核心的一句话是:敌人的敌人是朋友。那么假设每个x总有一个敌人(编号为x+n),那么可以把a加入到b的敌人b+n代表的并查集中,把b加入到a的敌人a+n的并查集中。如果find(a)==find(b),那么a和b是同gang;如果find(a)==find(b+n)或者find(b)==find(a+n),那么a和b是不同的gangs;否则,not sure。View Code 1 #include <iostream> 2 #in 阅读全文
posted @ 2012-09-07 09:53 芒果布丁 阅读(144) 评论(0) 推荐(0)