
数据结构—并查集
文章平均质量分 79
Ezereal
这个作者很懒,什么都没留下…
展开
-
POJ 1182 食物链
Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2 X Y",表示X吃Y。 此人对N个动物,用上述原创 2015-08-17 13:27:02 · 450 阅读 · 0 评论 -
bzoj 1050: [HAOI2006] 旅行comf
题意:给你一个无向图,N(N,求一条路径,使得路径上最大边和最小边的比值最小。如果S和T之间没有路径,输出”IMPOSSIBLE”,否则输出这个比值,如果需要,表示成一个既约分数。 备注: 两个顶点之间可能有多条路径。题解:按边权大小排序, 然后开始枚举, i从1开始, 不停加边直到s和t联通, 设此时为r, 将并查集初始化, 从r开始反向枚举, 直到st联通, 这原创 2016-10-02 12:41:27 · 450 阅读 · 0 评论 -
Codeforces 691D. Swaps in Permutation (并查集 + 优先队列)
简单题意给出一个序列,然后给出序列中可交换的位置,可以交换无限次,求最终结果中字典序最大的那一个。思路可以认为可交换位置的坐标之间是连通的,在同一个连通块之中排从大到小调整位置,把所有的连通块都调整完了以后,就是最终的解。这里用一个并查集来维护坐标之间的连通关系,然后用优先队列在父亲节点上保存所有的坐标,输出的时候只要从对应的父亲节点取出最大值即可。#inc原创 2016-10-10 09:31:17 · 327 阅读 · 0 评论 -
Codeforces Round #345 (Div. 2) E. Table Compression(并查集)★ ★
题意:给你n*m的矩阵,叫你转化成为另外一个矩阵,使得矩阵中的数字之和最小,且同一行,同一列的两个数的关系仍和原来的矩阵相同。 思路:因为同一行同一列的两个数仍要满足原来的等价关系,所以就相当于暗含了一个拓扑序,那么同一行和同一列的数相同的数要怎么办呢?利用一个并查集把他们捆绑起来。(先对原来的序列进行一个排序)#include #include #includ转载 2016-09-07 20:49:14 · 734 阅读 · 0 评论 -
Codeforces Round #346 (Div. 2) F. Polycarp and Hay (并查集+bfs)★
题意给你一个n*m的矩阵,然后给你一个k这个矩阵里面的数,只能减小,不能增加。然后你要是的矩阵最后只剩下一个连通块,且连通块里面有一个位置的数没有改变。连通块的权值和恰好等于k让你输出一个解。题解:把所有数,从大到小排序,然后用并查集去维护只要当前这个连通块的大小大于等于k/a[i][j]就好了然后输出的时候用bfs去输出,去维护原创 2016-09-15 12:37:01 · 812 阅读 · 0 评论 -
Hdu 3938 Portal((离线+并查集) (★)
题意描述:简单的讲就是,给你一张无向图,求有多少条路径使得路径上的花费小于L,这里路径上的花费是这样规定的,a、b两点之间的多条路径中的最长的边最小值!题解:用在这题中,是因为输入中的“询问部分”,有Q 个问,每个L可以有多少种不同路径。由于大的L必定会包含到小的L, 所以把所有问题都输入,再从大到小排序,再计算,可以减少很多计算量。这题还需要用到的是并查集中的“权值”, 用rank数组表原创 2016-07-25 10:12:43 · 747 阅读 · 0 评论 -
hdu 1811 Rank of Tetris(并查集+拓扑)
题意:终于,Lele要开始行动了,对N个人进行排名。为了方便起见,每个人都已经被编号,分别从0到N-1,并且编号越大,RP就越高。同时Lele从狗仔队里取得一些(M个)关于Rating的信息。这些信息可能有三种情况,分别是"A > B","A = B","A 现在Lele并不是让你来帮他制作这个高手榜,他只是想知道,根据这些信息是否能够确定出这个高手榜,是的话就输出"OK"。否则就原创 2016-07-24 11:55:50 · 252 阅读 · 0 评论 -
hdu 1598 find the most comfortable road(枚举+并查集)
题目:Problem DescriptionXX星有许多城市,城市之间通过一种奇怪的高速公路SARS(Super Air Roam Structure---超级空中漫游结构)进行交流,每条SARS都对行驶在上面的Flycar限制了固定的Speed,同时XX星人对 Flycar的“舒适度”有特殊要求,即乘坐过程中最高速度与最低速度的差越小乘坐越舒服 ,(理解为SARS的限速要原创 2016-07-23 15:26:03 · 292 阅读 · 0 评论 -
hdu 5652 India and China Origins (★)
题意:上边是中国,下边是印度,黑点的部分不可以走,下面的矩阵1代表黑点不能走,然后给了Q,每一次将一个点变成黑点,即不能走,问最少多少次就可以完成分析:这是一个连通性的问题。你会发现如果将所有操作逆序来看的话就很容易用并查集来处理了。 首先把所有的山峰都加到图中,然后逆序处理每个操作:对某次操作,在图中删除该位置的山峰,然后判断两个点是否联通,一旦联通就得到了结果。 这里需要对原创 2016-03-27 20:30:48 · 824 阅读 · 0 评论 -
codeforces 468B Two Sets
题目大意:给你N个互不相同的整数,再给两个整数a,b,问能否把这N个数分成两部分,使得在a这个集合中的任一个数ai,都存在a-ai也在a 这个集合中,对b集合也同理。如果不存在一种合理分法,输出No,否则输出YES,并输出任一种合理分组。解题思路:1,map映射,使得查找成对的数字查找更方便。2,虚拟出两个a,b集合的根结点n+1和n+2;3,并查集的特殊处理;原创 2016-03-13 17:42:58 · 591 阅读 · 0 评论 -
CodeForces 209C Trails and Glades(欧拉回路判断+并查集计算联通分量)
题意:判断能否构成欧拉回路,不能的话输出最小需要添加多少条边题解:并查集处理出联通分量,输入时处理出奇度数点个数,结果即为 奇度数点个数/2+不含奇度数点的联通分量个数,1节点自动算作一个联通分量 不管是否有边连接#include #include #include #include #include #include #include #include #include原创 2016-03-20 17:40:29 · 955 阅读 · 0 评论 -
poj 1733 Parity game(带权并查集)
题目大意是:一个由0,1组成的数字串~~,现在你问一个人,第i位到第j位的1的个数为奇数还是偶数。一共会告诉你几组这样的数要你判断前k组这个人回答的都是正确的,到第k+1组,这个人说的是错的,要你输出这个k,要是这个人回答的都是正确的,则输出组数思路:这题一看就想到要用并查集做了,不过一看数据这么大,感觉有点棘手,其实,我们仔细一想可以发现,我们需要记录的是出现过的节点到根节点的1个奇原创 2016-02-23 10:26:30 · 439 阅读 · 0 评论 -
hdu 3038 How Many Answers Are Wrong (带权)
题意:有 n 个数,你不知道它们的值, 然后又有 m 行数,每行 a ,b ,c,表示 a 到 b 之间所有数的和为c(包含了第a个和第b个数)。但是这m行数里面有些是错的,就是与前面给的条件相冲突的,要求你最后输出错了几行。分析:用并查集,同样,还是需要一个辅助数组r[]记录每一个点跟根节点的关系。首先我们可以把问题稍微转化一下,就是如果已知[3,6],[7,10]俩个区间内各自原创 2016-02-22 19:25:35 · 314 阅读 · 0 评论 -
Codeforces 292D (并查集巧妙运用)
题意:一个无向图,给出m条边,有k次询问,每次询问将第l到r条边暂时删去,求这时候有多少个连通分量。思路;首先预处理,分别从前往后和从后往前合并,从前往后的并查集用s[i]表示,代表从第1条边到第i条边的并查集,从后往前用l[i]表示,代表从第i条边到第m条边的并查集;每次询问,要将两个并查集合并,然后再求出连通分量的个数。#include #include #include原创 2016-03-17 11:23:49 · 1203 阅读 · 0 评论 -
UVA 11987 Almost Union-Find(并查集)
题意:初始有N个集合,分别为 1 ,2 ,3 .....n。有三种操件1 p q 合并元素p和q的集合2 p q 把p元素移到q集合中3 p 输出p元素集合的个数及全部元素的和。思路:并查集操作。1、3步比较容易实现,只要建立一个sum[],cnt[],记录每个结点相应值,和并时把值更新到根结点,输出时只要找到根结点输出其值即可。但2操作有点麻烦,并查集没有删除操作。原先以原创 2015-10-04 16:34:58 · 363 阅读 · 0 评论 -
HDU 1116 Play on Words
题目大意:给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙的意思。但是如果有多个重复的单词时,也必须满足这样的条件才能算YES。否则都是不可能的情况题解:利用并查集判断是否具有联通分量,在判断每个单词在首位与末位是否次数一致或差1#include#include#include#include#include#include #include #include #原创 2015-09-12 10:11:46 · 413 阅读 · 0 评论 -
Codeforces Round #360 (Div. 1) D Dividing Kingdom II(并查集+暴力) ★ ★
题意:给你一个n个点,m条边的图,q次询问,每次询问给出[L,R],用在[L,R]以内的边构成一个图,然后把这个图的点集分成两个部分,求连接同一个部分的点的最长边最小是多小思路:直接mq暴力+并查集....虚点建立得好巧妙啊#include #include #include #include #include #include #include #inclu原创 2016-10-08 10:54:20 · 776 阅读 · 0 评论