带权并查集
二分查找
这个作者很懒,什么都没留下…
展开
-
poj1733(带权并查集)
题意:有一很长的01序列;给出某个范围内数的1的个数是奇数或者是偶数;问到哪一句话为止都是对的;思路:因为n的非常大,达到了10亿,但实际输入只有5000行,也就是最多出现10000个不同的数字;所以用一个map映射,来离散化;接下来如果出现一组a,b;就相应的将a-1 (它的映射值)和 b并起来;r为1代表奇数,为0代表偶数;#include原创 2015-05-08 15:34:31 · 1478 阅读 · 0 评论 -
poj1611(带权并查集)
题意:有n个学生,m个组,每个学生可能属于多个组,现在0号得了SARS;和0号一组的也会得,然后和0号一组的人,他所在的组的组员也全会得,问最后总共几个人得了SARS;思路:只要加一个权值,就是这个组有多少个人;如r[i]表示i所在的组有多少人;所以每次并的时候,也要把这个组的人数并过去;最后数组0所在的组有几个人;#include#include#原创 2015-05-04 17:37:41 · 622 阅读 · 0 评论 -
poj1182(带权并查集)
题意:中文题就不描述了;思路:带权并查集模板题;加入一个数组r,表示这个点和它父节点的关系;0表示同类,1表示父亲吃它,2表示它吃父亲;每次需要更新和父亲之间的关系;#include#includeconst int N = 50005;int p[N],r[N],n,k;void init(int x) { for(int i = 0;原创 2015-05-04 17:39:50 · 362 阅读 · 0 评论 -
poj2236(并查集)
题意:图上有n个坏掉的电脑;如果两台电脑都是好的,并且距离小于d则可以通信,当然不需要直接通信也可以,可以通过中间一台好的电脑通信;O a表示修好了电脑aS a b问a,b能不能通信;思路:每次修好一台电脑,都和所有其他已经修好的电脑比较距离,如果小于d,和那台电脑并起来;#include#include#include#includeusing原创 2015-05-04 17:48:23 · 398 阅读 · 0 评论 -
poj1703(带权并查集)
题意:有n个人,属于两个敌对的帮派;O a b代表ab是敌对的;S a b输出a,b的关系(一个帮派,不同帮派或不确定);思路:r[a] 代表a和它父亲的关系;0为同帮,1为不同帮;如果两个不再一个集合里,则就是不确定关系;如果两个在同一个集合,就要判断他们和父亲的关系(同一个父亲)如果两个人都和父亲是敌对.或者都是友好,则两人是友好;否则敌对;需要在f原创 2015-05-04 17:44:33 · 575 阅读 · 0 评论 -
poj2912(带权并查集)
题意:有n个人分成3组玩石头剪刀布,同一组的人出的都是一样的;只有一个人是裁判,随意出;找出哪个是才判,并且判断在进行到哪一局时可以判断出裁判;思路:和食物链那题是一样的;不过我们要枚举裁判;就是我们枚举出来的裁判参加的比赛我们都不管;然后看看会不会出现错误;如果游戏除掉裁判后,从头到尾都没出现错误,则这个人是裁判;然后看看我们枚举其他人时,比如我们假设原创 2015-05-05 18:25:12 · 1561 阅读 · 0 评论