并查集
文章平均质量分 56
Clove_unique
All that you have lost can be won back bit by bit as long as you wish for it.
展开
-
[NOI2002]银河英雄传说(并查集)
题目描述传送门解题思路before表示i前面还有几个元素,count[i]表示i所在的有几个元素并查集代码#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;int father[30005],before[3...原创 2020-03-10 11:24:28 · 333 阅读 · 0 评论 -
[BZOJ4530][Bjoi2014]大融合(树链剖分+并查集)
forgetting someone doesn’t mean never think of him, but thinking of him with a calm heart.原创 2016-09-25 08:08:12 · 951 阅读 · 0 评论 -
[BZOJ4199][Noi2015]品酒大会(后缀数组+并查集)
题目描述传送门题解别出心裁的一道sa,想了好久。。40ptsO(n2)O(n^2)的做法应该很好想吧 sa+st表就可以了qwq100pts首先求出height数组 考虑如果只求一个r的话怎么做 显然可以将height数组分组,每个组里都是height>=r的,然后对于每一个组计数+取max 那么如果有多个r呢?显然r大的要比r小的分的组少一些 换句话说就是如果已经将r分组,再将r-1分组原创 2017-02-16 11:27:34 · 613 阅读 · 0 评论 -
[UOJ#279][UTR#2B]题目交流通道(floyed+并查集+容斥)
题目描述传送门题解先贴上jiry的题解,讲的还是不错的 http://jiry-2.blog.uoj.ac/blog/2242 然后说一下我觉得比较重要的地方首先这道题怎么来考虑呢?考虑将最短路为0和最短路非0来求 将两两最短路为0的点都缩成一个点,那么形成的这个新图就是一个有很多重边的图,并且点之间的最短路已知 要计算方案数,就是要分别计算缩成的点里有多少方案还有每条边都多少方案的乘积原创 2017-01-09 10:16:22 · 602 阅读 · 0 评论 -
[BZOJ3624][Apio2008]免费道路(贪心+并查集)
题目描述传送门题解贪心的思想:首先这一定是一棵生成树,那么我们先做生成树,尽量加水泥路,那么做完之后已经加入的鹅卵石路一定是必须要加的。那么我们打破第一次的生成树,再做一次生成树,首先把必须加的鹅卵石路都加进去,如果鹅卵石路不够k条的话再加进一些凑够k条,之后加水泥路使之成为一颗生成树。 也可以值么理解:如果把所有的水泥路都加入到生成树中的话会形成很多连通块,如果想让它成为强连通图的原创 2017-01-06 09:24:27 · 707 阅读 · 0 评论 -
[BZOJ3362][Usaco2004 Feb]Navigation Nightmare 导航噩梦(加权并查集)
题目描述传送门题解注意:时间乱序 加权并查集,维护两个参,互不影响。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 400005int n,m,Q,t,x,y,now,ans[N];struct hq{int x,y,w;char原创 2016-12-15 17:30:08 · 508 阅读 · 0 评论 -
[BZOJ3674]可持久化并查集加强版(可持久化线段树+并查集)
题目描述传送门题解可持久化并查集,实际上就是用可持久化线段树维护一下每一个点的father。这道题我加了路径压缩,这样的话感觉不是很科学,因为最坏情况下应该是log2log^2的。 据说这道题应该用按秩合并?代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 200005in原创 2016-12-15 16:45:03 · 623 阅读 · 0 评论 -
[BZOJ2959]长跑(lct+并查集)
题目描述传送门题解用lct维护一颗动态树。 如果连了某一条边形成了一个环,证明一次长跑这个环上的所有的点都可以被统计,所以可以将这个环缩成一个点。用ufs来实现。 那么一次长跑实际上就是在一条树链上跑,只有一个方向,在lct上维护一个sum就可以了。 时间复杂度是均摊的,因为每一个点至多被缩点一次,所以O(k(mlogn+n)α(n))O(k(mlogn+n)\alpha(n))。lct常数非原创 2016-12-09 19:05:41 · 1060 阅读 · 0 评论 -
并查集 小结
并查集在许多题目里其实只是用来辅助的一个小数据结构,用来实现简单的查找和合并。本文只挑选了以并查集为中心、以并查集的灵活运用为根本的题目——经典的&&特殊的技巧[BZOJ4195][Noi2015]程序自动分析 Noi中竟然出了基础的并查集题目!这道题确实只是并查集的简单操作,只不过需要离散化+排序而已。 [NOIP2010]关押罪犯 并查集里经常会有一类问题:敌人的敌人还是朋友。 其实这道原创 2016-11-19 19:33:27 · 789 阅读 · 0 评论 -
[BZOJ1969][Ahoi2005]LANE 航线规划(树链剖分+并查集)
Good start, no patient and tolerant, bear no satisfactory fruit.再好的开始,没有恒久的忍耐和包容,也结不出圆满的果实。原创 2016-09-24 11:27:33 · 1039 阅读 · 0 评论 -
[BZOJ4602][Sdoi2016]齿轮(加权并查集+分解质因数)
题目描述传送门题解加权并查集,每一个点的dis表示这个点的代表元素转一圈这个点转了多少圈。然后正常做。 但是有一个问题,貌似数据范围很小,但是可以发现在极限情况下是1001000100^{1000},这就非常不好了。所以要把dis分解质因数来做。一定要想清楚数据范围!代码#include<iostream>#include<cstring>#include<cstdio>using nam原创 2016-12-15 16:47:54 · 629 阅读 · 0 评论 -
[BZOJ1998][Hnoi2010]Fsk物品调度(置换群+并查集)
题目描述传送门题解首先考虑如何构造出pos 因为要求在x最小的情况下y最小 那么当y固定的时候x会有一坨取值,也会有一些不同的数 考虑先枚举y=0,然后如果x没有合适的取值再将y+1 因为要求最终的答案不重复,那么如果w已经在答案中出现过了,那么w+d是有可能出现的(将x+1),所以用并查集将w并到w+d 这样的话,首先枚举y,如果ci+y所在的集合中的元素都被选过了,那么只能将y+1求出原创 2017-02-23 21:37:59 · 808 阅读 · 0 评论 -
[BZOJ1083][SCOI2005]繁忙的都市(二分+并查集)
题目描述传送门题目大意:给出n个点m条边的无向图,每一条边有一个边权,要求选出一些边,将n个点连通,并且边的数量最少,并且边权的最大值最小。题解首先二分答案,然后并查集判定这些边是否能将n个点连通 边数最少必然是一棵树啊代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath原创 2017-05-02 21:01:30 · 784 阅读 · 0 评论 -
[HDU1038]Ant Trip(并查集+欧拉图)
题目描述传送门题目大意:给出一个n个点m条边的无向图,问最少用多少条路径能覆盖每一条边恰好一次。题解用并查集维护出每一个连通块,然后统计每一个连通块内有多少个奇点,对答案的贡献应该为max(x/2,1) 需要注意的一点是如果有一个点自己是一个连通块的话对答案的贡献应该为0代码#include<algorithm>#include<iostream>#include<cstring>#incl原创 2017-04-13 21:32:18 · 661 阅读 · 0 评论 -
[BZOJ2303][Apio2011]方格染色(数学相关+加权并查集)
题目描述传送门题目大意:一个n*m的网格染成红蓝两种颜色,要求每个田字格有1个或3个红色的。现在有一些格子已经染了颜色,问有多少合法的染色方案。题解和这题gang了一天。。。这题的关键在于,将每一个限制点的关系,转化成和第一行第一列的关系 若把颜色标记为0/1,那么每个田字格的异或值为1。首先枚举(1,1)的取值。考虑一个限制点(x,y)(x>1,y>1),如果x,y都为偶数,那么(1,1)..(原创 2017-04-28 20:12:48 · 832 阅读 · 0 评论 -
[BZOJ3706]反色刷(并查集+欧拉图)
题目描述传送门题解欧拉回路,比较显然的一点是有解的充要条件是没有奇点 刚开始一直在往维护黑边的连通块个数的方面考虑,然后就一直在想什么写个lct啊… 但实际上这样做是有一点问题的,因为白边不一定不走只要走偶数次就可以 那么可以将一条白边看成两条黑边,这样的话对每个点的奇偶性是没有影响的,而且同样是求欧拉回路 用并查集先维护出连通块了之后,只需要记录一下每一个连通块是否有黑边,如果有黑边的话就原创 2017-04-13 21:05:18 · 876 阅读 · 0 评论 -
[BZOJ2594][Wc2006]水管局长数据加强版(kruskal+lct)
题目描述传送门题解写lct就应该有那种誓死不看板子的气魄。这道题思路还是很清晰的,维护一棵最小生成树,每一次找树链上权值最大的边 删边变成倒序加边 最开始的时候用没有删的边kruskal直接最小生成树 动态的话就是维护一棵lct,每一次加边的时候先找树链上的最大边,如果最大边大于当前边就把最大边砍掉,把当前边加进去 lct一遍敲√然而预处理错了,gg代码#include<algorithm>原创 2017-04-01 08:42:29 · 1055 阅读 · 0 评论 -
例题:最短网络 图论算法之最小生成树 prim//kruskal 学习笔记
图论算法之最小生成树 prim//kruskal 最小生成树简单的说就是在一个图里选取一些边,使这些边以及它们所连接的结点组成一棵树(两两结点之间可以到达),并且使选取的边的边权最小。 它的成立条件是图是连通的。并且选取的边数为n-1。(有n个结点,n-1条边,只能为一棵树,没有别的可能) 主要有两个算法:prim和kruskalprim原创 2015-10-05 11:03:09 · 1289 阅读 · 0 评论 -
例题:[codevs1073/tyvj1251]家族 并查集 学习笔记
并查集并查集是一种树结构,可以把它看成是若干个集合,相同集合的点有相同的根节点;每一个点都有自己的代表元素,初始化时所有点的代表元素都是它本身,最终同一个集合里的点把它的代表元素递归上去,就可以找到它们公共的根;并查集的几种基本操作:1、合并2、查找3、路径压缩合并合并两个点,首先要找到这两个点的代表元素;如果f[i]代表i的代表元素,n1,n2分别是查找到的两个值原创 2015-09-19 19:53:02 · 766 阅读 · 0 评论 -
[BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(multiset+并查集)
题目描述传送门题解刚开始想的是每一次只查询某一个点左下角离他最近的点,做4遍 这应该是可做的,但是为了练习stl (偷懒)想用set做,结果发现并不可做 因为貌似set的lower_bound只适用于一个关键字后来得知了一种很强的方法 就是把一个点的坐标变成(x+y,x-y) 两个点的哈弗曼距离也就变成了两维的距离的max 按照一维排序了之后,维护multiset中的点在这一维的差不超过c原创 2017-03-17 21:59:06 · 531 阅读 · 0 评论 -
[BZOJ1232][Usaco2008Nov]安慰奶牛cheer(贪心+kruskal)
题目描述传送门题解将每一条边的边权记为原边权*2+两个点的权值,然后做最小生成树。 但是发现这样的话起点会少访问一次。 起点无论是哪个都是这n个点之中的嘛。。那么选一个最小的就好啦。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 1原创 2016-11-15 20:49:32 · 575 阅读 · 0 评论 -
[BZOJ1202][HNOI2005]狡猾的商人(并查集+前缀和)
题目描述传送门题解刚开始感觉只有几个区间和另外几个区间都拼成了同一个区间的时候才有可能判false,然后xjblg写出了一个对拍都不过的code然后交上去A了= =可见数据之弱。 网上的正解是并查集,YY了挺久的。 读入区间(l,r,w),如果l和r不在一个集合里,将它们合并;否则判断dis_r-dis_x是否等于w(其中dis_i表示i到它祖先的距离)代码xjblg#include<algor原创 2016-05-10 21:16:28 · 1245 阅读 · 0 评论 -
[BZOJ1015][JSOI2008]星球大战starwar(并查集)
最勇猛的战士,总是柔声细语。原创 2016-03-31 23:50:12 · 815 阅读 · 0 评论 -
格子游戏 解题报告
格子游戏 解题报告v【问题描述】v Alice和Bob玩了一个古老的游戏:首先画一个n * n的点阵(下图n = 3) 接着,他们两个轮流在相邻的点之间画上红边和蓝边:vvvv 直到围成一个封闭的圈(面积不必为1)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了(n<= 200),他们的游戏实在是太长了!他们甚至在游戏中都不知道谁赢得了游戏。于是请你写原创 2015-09-23 16:37:55 · 3369 阅读 · 2 评论 -
搭配购买 解题报告
搭配购买Problem DescriptionJoe觉得云朵很美,决定去山上的商店买一些云朵。商店里有n朵云,云朵被编号为1,2,...,n,并且每朵云都有一个价值。但是商店老板跟他说,一些云朵要搭配来买才好,所以买一朵云则与这朵云有搭配的云都要买。但是Joe的钱有限,所以他希望买的价值越多越好。Input输入有多组数据,每组数据第1行、m、w,表示n朵云,m个搭配,Joe有w的钱原创 2015-09-21 19:35:21 · 1607 阅读 · 0 评论 -
家谱 解题报告
家谱 解题报告v家谱v【问题描述】v 现代的人对于本家族血统越来越感兴趣,现在给出充足的父子关系,请你编写程序找到某个人的最早的祖先。v【输入格式】gen.inv 输入文件由多行组成,首先是一系列有关父子关系的描述,其中每一组父子关系由二行组成,用#name的形式描写一组父子关系中的父亲的名字,用+name的形式描写一组父子关系中的儿子的名字;接下来用?name原创 2015-09-21 19:45:38 · 1863 阅读 · 0 评论 -
打击犯罪 解题报告
打击犯罪 解题报告v【问题描述】v 某个地区有n(n们编号为1-n,他们有些团伙之间有直接联系,但是任意两个团伙都可以通过直接或间接的方式联系,这样这里就形成了一个庞大的犯罪集团,犯罪集团的危险程度唯一由集团内的犯罪团伙数量确定,而与单个犯罪团伙的危险程度无关(该犯罪集团的危险程度为n)。现在当地警方希望花尽量少的时间(即打击掉尽量少的团伙),使得庞大的犯罪集团分离成若干个较小原创 2015-09-19 20:28:28 · 3585 阅读 · 0 评论 -
【codevs2597/tyvj1602】团伙 解题报告
【codevs2597/tyvj1602】团伙 解题报告描述1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。 而且有一点是肯定的,就是A的朋友的朋友是A的朋友;A的敌人的敌人也是A的朋友。 两个强盗是同一伙的当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你至多有多少个强盗团伙。输入格式输入的原创 2015-09-19 19:37:02 · 1203 阅读 · 2 评论 -
【NOI2000/codevs1074/tyvj1438】食物链 解题报告
【NOI2000/codevs1074/tyvj1438】食物链 解题报告描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A吃B,B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是原创 2015-09-28 20:09:37 · 1092 阅读 · 0 评论 -
[BZOJ3694]最短路(并查集)
在那些满是伤痕的日子里 愿望总是难以实现原创 2016-04-27 15:56:16 · 1362 阅读 · 0 评论 -
[BZOJ1576][Usaco2009 Jan]安全路径Travel(堆优化dijkstra+并查集)
我时常有这样的感觉在那通往遥远梦想之旅的途中如果就此止步的话就会感到输给了自己原创 2016-04-27 16:46:17 · 1164 阅读 · 0 评论 -
[BZOJ1912][Apio2010]patrol 巡逻(dfs+并查集+树形dp)
痛苦的事是不用一直去想的,因为是想忘也忘不掉的。原创 2016-05-03 14:53:50 · 865 阅读 · 0 评论 -
[BZOJbegin][NOIP十连测第九场]小P的生成树(数学相关+kruskal)
题目描述 题解因为我们最终是要求 sum(a)2+sum(b)2√\sqrt {sum(a)^2+sum(b)^2}尽可能的大,所以我们肯定不能单独考虑其中一个权值的影响。那么如何将两个影响考虑到一起呢?我们把(ai,bi)(a_i,b_i)看成是有方向的向量,那么最终选取的边的和应该也是一个有方向的向量,假设我们找出该向量的极角,然后求出每个边对于该方向的投影,投影原创 2016-11-17 08:13:04 · 642 阅读 · 0 评论 -
[BZOJ4195][Noi2015]程序自动分析(离散化+ufs)
题目描述传送门题解ij的范围比较大,而n的范围只有10510^5,直接离散化之后上ufs就好了。 将等于的情况先处理,不等于的情况后处理。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 100005int T,n,cnt;struc原创 2016-11-02 09:28:09 · 524 阅读 · 0 评论 -
[BZOJbegin][NOIP十连测热身赛]星球联盟(并查集)
题目描述传送门题解首先搞出来一颗生成树。如果存在多个连通块,把它们都连到1上去。 对于每一条非树边,连上它形成一个环,那么这个环上的所有点一定是在同一个联盟里的。 于是我们可以用并查集将树链上的点缩起来,在做并查集的过程中维护点的大小。由于每个点都只会被合并一次,时间复杂度是O(n)O(n)的。代码#include<iostream>#include<cstring>#include<cst原创 2016-11-16 18:49:33 · 727 阅读 · 0 评论 -
[BZOJ4579][Usaco2016 Open]Closing the Farm(并查集)
题目描述传送门题解和什么星球大战starwar那道题很像。。直接倒序上ufs就可以了。 动态维护联通块个数。 每条边只会被左右端点枚举两边,时间复杂度O(2∗m∗α(n))O(2*m*\alpha(n))代码#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 200005int原创 2016-11-16 14:41:44 · 571 阅读 · 0 评论 -
[BZOJ4569][Scoi2016]萌萌哒(并查集+st表)
我不知道什么叫年少轻狂,我只知道什么叫胜者为王。原创 2016-08-02 20:16:38 · 714 阅读 · 0 评论 -
[BZOJ1050][HAOI2006]旅行comf(并查集)
那些辗转反侧的夜晚,在某人的梦中,或许有着你未演完的情节。原创 2016-09-21 19:11:28 · 1558 阅读 · 0 评论 -
[noip模拟赛]Formula 1(bfs+并查集)
每个人都会累,没人能为你承担所有伤悲,人总有一段时间要学会自己长大。原创 2016-08-23 17:37:35 · 656 阅读 · 0 评论 -
[BZOJ3669][Noi2014]魔法森林(并查集+LCT)
无论发生什么都不要停下。无论到什么时候都要继续前进。原创 2016-05-04 20:26:20 · 1802 阅读 · 0 评论