![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
bllsll
巴拉拉,起飞。
展开
-
并查集——分身法
参考http://www.cnblogs.com/FYH-SSGSS/p/5777744.html试题描述 俗话说得好,敌人的敌人就是朋友。 现在有n个人,编号1至n,初始互不相识。接下来有m个操作,操作分为两种:(1)检查x号和y号是否是朋友,若不是,则变成敌人 (2)询问x号的朋友有多少个 请你针对每个操作中的询问给出回答。 输入 第一行两个正整数n、m,表示人的数量和操作的数量。原创 2017-05-14 20:25:45 · 533 阅读 · 0 评论 -
枚举+并查集
这个并查集的部分和食物链有点像,但是难点在与我们需要把那个自由人跳过,不插入并查集。怎么知道呢,我们就枚举啊。。其中那个求出来的行数,还要想一想。#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> #include <vector>using namespace原创 2017-06-10 14:31:22 · 207 阅读 · 0 评论 -
poj 1984
注意,题目中说的是|x1-x2|….不要弄成加了。。。。 然后超时的话,可能是你的询问的时候,每次都从0开始的。。#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath>using namespace std;const int maxn = 40005; struc原创 2017-06-10 11:42:16 · 272 阅读 · 0 评论 -
贪心+并查集
先将价值排好序,如果它的deadline被用了的话,我们就往前找,直到一个没有被用的时间(不超过0)。如果没有被用的话,我们就直接在deadline的时候做了它#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm>using namespace std; const原创 2017-06-09 18:00:12 · 281 阅读 · 0 评论 -
A Bug's Life 分身法OR 带权并查集
题意:一共有n只昆虫,然后给你m种交配方式(按理说应该是两种不同性别),问你有没有同性的,也就是和上面矛盾的地方 分身法: 和前面的那个找敌人人一样的。根相同代表是同一性别的,然后看他们如果根相同的话就表示同性,然后就是表示found#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #inc原创 2017-05-15 00:14:03 · 632 阅读 · 0 评论 -
1182 食物链
今天又把这个经典的带权并查集拿出来看看………. 唉…..其中一个括号打错了,浪费3个小时。感觉并查集,就是确定一个根,然后看点与根之前的关系。普通并查集就是连起来就好了,只有有关系和没关系之分。但是带权并查集的话,就是还分有什么关系。#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #incl原创 2017-06-08 20:42:21 · 257 阅读 · 0 评论 -
简单并查集Wireless Network POJ - 2236
这个题之前看的时候总是感觉不是很懂那个题目意思。现在感觉还蛮简单的。。。这里的话,学到了一点,如果用到了sqrt的话,还要判断大小相等关系的话,可以转化为平方来做。#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath>using namespace std; cons原创 2017-06-08 15:44:18 · 250 阅读 · 0 评论 -
HDU 3038 带权并查集,区间
题意:TT是一个男孩,FF是一个女孩,然后FF告诉TT n个区间以及他们的区间和,然后TT判断有多少个是和之前矛盾的。 这个讲的蛮清楚 我们如果要判断是不是和前面矛盾的话,我们就需要把前面的记录下来。 sum[i]:i到它最左边的值 dis[i]:i的最左边 还是要画图好理解点~ 如果两个点的最左端点相同的话,我们就可以直接判断其中是不是矛盾的 如果不同的话,还要更新最左端点。#inc原创 2017-06-08 10:35:35 · 248 阅读 · 0 评论 -
HDU 3926 Hand in Hand (同构图)
刚开始的时候还没看懂题目,还以为看这两个图是不是一样呢。。。结果果断WA。。 题意:给你两个图问你是不是同构的,两个图同构就是指两个的节点数要相同,然后图的结构也要相同。比如说有多少个环呀,每个环中有多少个节点呀,要相同。顺序没有要求 这个题,每个孩子有两只手,所以可能为连通分量,就是要么是环,要么是链,不可能两种情况共存,因为每个点的度数最多为二嘛。 然后我们判断两个图是不是同构的话,我们要原创 2017-05-16 20:42:56 · 322 阅读 · 0 评论 -
HUST 1625 Chessboard 并查集
题意:在一个n*n的棋盘中放棋子,有m个操作,操作有 两种 C a b v :在(x,y)上放一个棋子,棋子的价值为v(保证这个位置之前没有放过棋子)Q a b :查询与(a,b)相连的棋子中的最大价值 上下左右为相连用并查集。开个一维数组,将二维的坐标压到一维,这样,然后用并查集就行了。#include <iostream> #include <cstring> #include <alg原创 2017-05-16 11:13:34 · 215 阅读 · 0 评论 -
HDU 2818 Building Block (带权并查集)
这个题感觉很有意思!!!!!!!! 还是花了些时间的 题意:给你p种操作,操作分别有 1 x y 表示将带有x的一堆放到y的上面 2 x 表示询问x的下面有多少个blocks 对于每次的询问,我们都要输出相应的答案分析:我们怎么知道一个数下面有多少个数呢?把一堆放到另一堆上,我们只能知道上一堆的最下面一个的答案是下面那一堆的节点数,那上面的那一堆其他的答案怎么求呢,相当于他们原来本身原创 2017-05-15 21:03:23 · 206 阅读 · 0 评论 -
并查集水题
从昨天开始POJ就开始炸了,还是刷一刷之前HDU上的并查集 HDU 1272 小希的迷宫 判断是不是一棵树 1.是连通的 2.无环 注意空树也是树~~~因为没有考虑这个WA了几发HDU 1325 Is It A Tree? 给你一些有向边,问你是不是一棵树。 1.只有根节点的入度为0,其他节点的入度都为1. 2.是连通的 3.无环 和前一道题多了一个入度和出度 一定别忘记考虑空原创 2017-05-15 15:04:39 · 255 阅读 · 0 评论 -
HDU 3047 带权并查集
题意:有n个人(1…n),然后给你m条规则,每条规则格式为:a,b,x。表示第a个人的位置+x是第b个人的位置。然后问你有几个是不正确的规则(看作一维) 分析:有几个规则是不正确的,也就是说不能有两个人的位置相同(一定) 我们可以用带权值的并查集来做,如果a,b根结点不同,则规则是正确的,将a,b两个树合并,如果a,b的根节点是相同的,则看他们满不满足第a个人的位置+x是第b个人的位置,若不满足原创 2017-05-14 20:42:53 · 224 阅读 · 0 评论 -
并查集+背包
这个题开始的时候没有什么头绪。 然后我们先用种类并查集来分组,然后用dp来判读是不是唯一,用p数组记录,便于输出值#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> #include <vector>using namespace std; const int原创 2017-06-09 17:53:16 · 263 阅读 · 0 评论