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