![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM-图论-并查集
暗金色
这个作者很懒,什么都没留下…
展开
-
HDU 5480 Conturbatio(并查集或前缀和)
题目大意:给出一个N*M的棋盘,棋盘上面有K只车,车能攻击所在行和列 现在给你一个矩阵,问这个矩阵内的所有棋子是否都能被攻击到解题思路:这题我用的是并查集,把连续的能攻击的行和列并起来,查找的时候就比较简单了 矩阵的所有棋子要被攻击到,要么矩阵内所有行都有车,要么所有列都有车,要么两者都成立还有另一种思路,就是用前缀和,直接两个位置的前缀和相减判断是否矩阵内的行和列都能被攻击到 这里只给出并查原创 2015-09-27 10:54:44 · 472 阅读 · 0 评论 -
UVALive - 3027 Corporative Network 并查集+向量
题目大意:有n个节点,初始时每个节点都是独立的,现在给出两种操作 I u v,将节点u的父节点设置为v,u和v两点的距离为abs(u-v) % 1000 E u,询问u节点到根节点的距离解题思路;按并查集的思路来,不过这题要算上距离,在压缩路径的同时把距离给计算出来#include<cstdio>#include<algorithm>#include<cstring>#include<cm原创 2015-03-24 18:59:13 · 495 阅读 · 0 评论 -
HDU - 3047 Zjnu Stadium 带权并查集
题目大意:有N个人,M个句子,句子的组合为A B X,A和B代表位置,X表示距离,合起来就是判断A和B的距离是否为X,现要求找出这M个句子中有句是错误的题思路:带权并查集合,用d[a]表示由根节点指向a的一条向量,现给出了原创 2014-12-14 23:10:47 · 627 阅读 · 0 评论 -
POJ - 1611 The Suspects(并查集)
题目大意:严重急性呼吸系统综合症( SARS), 一种原因不明的非典型性肺炎,从2003年3月中旬开始被认为是全球威胁。为了减少传播给别人的机会, 最好的策略是隔离可能的患者。 在Not-Spreading-Your-Sickness大学( NSYSU), 有许多学生团体。同一组的学生经常彼此相通,一个学生可以同时加入几个小组。为了防止非典的传播,NSYSU收集了所有学生团体的成员名单。他们的标准原创 2015-09-16 00:00:07 · 384 阅读 · 0 评论 -
POJ - 2236 Wireless Network(并查集)
题目大意:给出N个点,刚开始每个点都是坏的,每个点都有相互连接,但是要满足两点之间的距离小于dis才可以进行通信 现在给出2种操作 O i:修复第i台电脑 S u v:询问第u台和第v台电脑能否通信解题思路:用并查集将所有能通信的电脑并在一起,如果新修了电脑,那就找寻一下他所能连接的集合,然后并进去 因为该电脑可能起着连接多个集合的作用,所以集合也要相应合并#include<cstdio>原创 2015-09-16 00:07:09 · 467 阅读 · 0 评论 -
POJ - 2524 Ubiquitous Religions(并查集)
题目大意:当今世界有很多不同的宗教,很难通晓他们。你有兴趣找出在你的大学里有多少种不同的宗教信仰。 你知道在你的大学里有n个学生(0 < n <= 50000) 。你无法询问每个学生的宗教信仰。此外,许多学生不想说出他们的信仰。避免这些问题的一个方法是问m(0 <= m <= n(n - 1)/ 2)对学生, 问他们是否信仰相同的宗教( 例如他们可能知道他们两个是否去了相同的教堂) 。在这个数据中原创 2015-09-16 00:09:06 · 383 阅读 · 0 评论 -
POJ - 1988 Cube Stacking(带权并查集)
题目大意:有N个栈,刚开始每个栈都放着一个相应的数字,现在给出两种操作 M u v:将u所在的栈的所有数字移动到v所在的栈上面 C u:询问u下面有多少个数字解题思路:这题可以用一个数组num记录一下每个栈有多少个数字 然后带权并查集,权值表示的是该数字下面还有多少个数字 根结点为每个栈的最底下的数,每次移动的话,需要将u结点所在的栈的num清0,然后u结点的指向根的向量赋值为v结点所在的栈原创 2015-09-16 00:22:58 · 391 阅读 · 0 评论 -
POJ - 2912 Rochambeau(带权并查集+暴力)
题目大意:给出N个人剪刀石头布的结果,问能否判断哪个人是裁判,在第几个回合可以判定解题思路:如果这个人是裁判的话,那么去掉它的话,对结果是不影响的 所以可以暴力枚举一下谁当裁判,然后判断一下#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define maxn 510#define maxm原创 2015-09-16 00:28:49 · 1008 阅读 · 0 评论 -
UVA - 11165 Galactic Travel(bfs+尺取法+并查集)
题目大意:有N个星球,任意两个星球之间的距离为1,因为一次爆炸事故,有M种路被炸坏了,现在给出S和T,求S到T的最短距离解题思路:如果直接bfs就挂了,每个点只需要被遍历一次就够了,这个可以用并查集解决,用f[i]表示下一个结点要从哪开始 用尺取法的思想,从小到大,依次判断一下能否到达该点,如果可到达的话,那么距离就加1,并将该点并入。 如果不行的话,找寻下一个点,并判断能否到达即可#inclu原创 2015-09-16 15:54:44 · 692 阅读 · 0 评论 -
UVALive - 4487 Exclusive-OR 加权并查集
题目大意:有n个数,刚开始都不知道是什么,有三种操作, I p v: 第p个数等于v I p q v: 第p个数^第q个数的结果为v Q k p1 p2 p3 .. pk: 要求回答第p1个数到第p2个数的异或的结果解题思路:还是像以往一样压缩路径,只不过压缩的时候要并上权,参考别人的思路的…. http://www.cnblogs.com/kkrisen/archive/2014/07/原创 2015-03-28 21:29:22 · 1005 阅读 · 0 评论 -
UVA - 11987 Almost Union-Find 并查集
题目大意:有n个集合,提供三种操作 1 p q:将p所在的集合和q所在的集合并起来 2 p q:将p元素移到集合q所在的集合 3 p:求出p所在集合有多少个元素并输出这些元素的和解题思路:第二种操作比较难,如果p是根的话,移动的话就比较难了这里设置两个父亲节点,f[0]代表实父亲,f[1]代表虚父亲 然后在find的时候分两个情况进行合并#include<cstdio>#define ma原创 2015-03-29 21:14:22 · 530 阅读 · 0 评论 -
POJ - 1182 食物链 并查集升级版
题目大意:解题思路:点击打开链接#include#include#define maxn 50010int r[maxn],p[maxn];int N,K,D,X,Y;int find(int x) { if(x == p[x]) return x; int tx; tx = find(p[x]); r[x] = (r[x] + r[p[x]]) % 3; re原创 2014-12-12 23:54:12 · 622 阅读 · 0 评论 -
POJ - 1308 Is It A Tree?(并查集+dfs)
题目大意:给出你N条有向边,问能否形成一棵树解题思路:并查集查看每个点是否在都连通,然后dfs判断是否有环 有特例, 0 0的时候是一棵树#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 100010;const int INF = 0x3f3f3f3f;int原创 2015-09-15 18:52:24 · 393 阅读 · 0 评论 -
UVA - 10608 Friends 并查集水题
题目大意:有N个人,M种朋友关系,朋友的朋友就是朋友,问这N个人中,最多的朋友圈里面的人有几个解题思路:并查集水题,吓了一跳,以为多难呢...#include#include#include#includeusing namespace std;#define maxn 30010#define maxm 500010int N,M;int p[maxn];int num原创 2014-12-11 18:49:04 · 581 阅读 · 0 评论 -
UVALive - 3644 X-Plosives 并查集
题目大意:有一种简单化合物,由两种元素组成,要将这种简单化合物装车,但是又要求车上的k种化合物不能刚好由k种不同元素组成,因为这样会爆炸,现要求你输出多少个没有装车的化合物解题思路:将简单化合物看成一条有线段,线段有两个端点,如果由这些线段组成一个环的话,就满足爆炸的条件了,所以满足环的话,这种化合物就不能装进去#include<cstdio>#include<cstring>#define m原创 2015-03-23 21:05:34 · 494 阅读 · 0 评论 -
POJ - 1703 Find them, Catch them(带权并查集)
题目大意:有两个帮派,N个人,现在有M个操作 A u v:表示询问,问u和v是不是属于同一个帮派的 D u v:表示u和v是在不同的帮派的解题思路:带权并查集,刚开始都初始化为0,剩下的操作就是带权并查集模版了 如果u和v到根的权值不同的话,表示两个人帮派不同,如果相同的话,就表示帮派相同了#include <cstdio>#include <cstring>const int N = 1原创 2015-09-16 00:16:00 · 361 阅读 · 0 评论 -
POJ - 1733 Parity game 带权并查集+离散化
题目大意:有10E位数,每位上的数不是1就是0。现在给出第n位到第m位的1的数量的奇偶性,判断所给出的话有几句是对的解题思路:有10E位数,肯定要离散化处理 因为有可能给出的区间是左端点等于右端点的,所以每次都把左端点的值减去1再进行处理 给出了区间的奇偶性,就要找一下是否和前面的矛盾,如果该区间的左端点的根节点和右端点的根节点是相同的,那么就可以判断是否正确了 如果根节点不同,就进行合并,合原创 2015-05-07 14:23:51 · 757 阅读 · 0 评论 -
ZOJ - 3811 Untrusted Patrol bfs+并查集
题目大意:给出n个点,m条线,l个摄像头。现在给出c个依次走过的摄像头,在这个条件下能否遍历这n个点,线之间可以来回移动,不限次数和方向解题思路:1.c如果小于l,那么点就不可能被全部遍历2.用并查集把相连的点并起来,如果并起来的点小于n的话,就表示这不是一个联通图,那么就不能遍历所有点了3.用bfs把从该摄像头点出发能到达的点遍历。因为要按照顺序经过摄像头,所以只能遍历那些非摄像原创 2015-03-08 10:11:32 · 565 阅读 · 0 评论 -
UVA - 1493 Draw a Mess 并查集+压缩图
题目大意:给出n*m的点,可以在上用不同颜色的笔画矩形,菱形,等腰三角形和圆形,因为是一个一个画的,所以有的点会被覆盖掉,原先的颜色就会被覆盖掉了。现在给出每个人画的图案和顺序,问最后每种颜色占了多少个点解题思路:如果直接暴力的话就会TLE 为了防止被覆盖,就倒着画,如果该点被占有了,就不可以再画了 我们用并查集将每一个点所能到达的最右端的点纪录下来,将那些被使用过的点并起来,然后依次从上往下扫原创 2015-05-07 23:41:25 · 661 阅读 · 0 评论 -
HDU - 3081 Marriage Match II(二分图最大匹配 + 并查集)
题目大意:有n个男生n个女生,现在要求将所有的男女配对,所有的男女都配对的话,算该轮游戏结束了。接着另一轮游戏开始,还是男女配对,但是配对的男女不能是之前配对过的。 问这游戏能玩多少轮 男女能配对的条件如下 1.男女未曾吵架过。 2.如果两个女的是朋友,那么另一个女的男朋友可以和该女的配对解题思路:并查集解决朋友之间的关系,找到能配对的所有情况 接着二分图匹配,找到一个完美匹配算玩了一轮游原创 2015-08-04 14:02:49 · 723 阅读 · 0 评论 -
UVA - 10158 War 并查集升级版
题目大意:题目好长,就不细说了解题思路:解法1:设置两个数组,一个数组时并查集的基本数组p[maxn],另一个数组r[maxn]表示点和根节点的关系,0表示和根节点时朋友,1表示和根结点是敌人,那么在并查集的时候就可以顺便设置以下r数组了,这里用到的是向量思想,什么是向量思想,下面会给链接,这里就不解释了点击打开链接解法2:给每个人设置一个永远的敌人,他和他永远的敌人不在同一个集合,然原创 2014-12-12 23:51:38 · 658 阅读 · 0 评论