并查集
DZYO
Never stop
展开
-
BJ模拟 Pandaria(可持续化并查集)
Description Mr. Panda 有 N 个花园,编号从 1 到 N 。对于编号为 i 的花园,花园里只有一朵花,颜色为 ci 。花园与花园之间有道路连接(道路是双向的)。每条道路都有一个花费,表示经过该道路花费的时间。 Mr. Panda 喜欢在他的N个花园中转悠,然后采尽可能多的同种颜色的花。然而,有时候他并不想花太多时间走同一段路。现在问题来原创 2017-03-23 21:17:32 · 680 阅读 · 0 评论 -
Codechef :Counting on a Tree/TREECNT2(并查集)
传送门题解:第一个数据n=1让我调了一年。。。首先ans=∑xμ(x)f(x)ans=\sum_x\mu(x)f(x)ans=∑xμ(x)f(x),f(x)f(x)f(x)表示有多少条路径的值全为xxx的倍数。显然路径上的边权值肯定是xxx的倍数,我们对于每个xxx把所有他倍数的边加入图中。因为只用管μ(x)̸=0\mu(x) \not =0μ(x)̸=0的值,每个边最多位于272^...原创 2018-10-10 10:26:16 · 328 阅读 · 0 评论 -
HDU6271:Master of Connected Component(树分块+并查集)
传送门题解: O(n2logn)O(n2logn)O(n^2 \log n )就直接暴力并查集。不过注意到我们要算很多重复的部分。容易想到dfs到一个点,我们把距离他O(n−−√)O(n)O(\sqrt{n})的点的答案都做出来。 合理分配后这样的点最多n−−√n\sqrt{n}个。我们对这n−−√n\sqrt{n}个点都算一次即可。 时间复杂度O(nn−−√logn)O(nnlog...原创 2018-07-11 19:37:38 · 480 阅读 · 0 评论 -
NOI模拟 : Vain (并查集维护割点)
题意: 对于 1 ≤ i ≤ n, 求出点 i 度数强制为 1 的情况下最小生成树的最大边的权值。题解: 相当于求出删掉每个点之后的MSTMSTMST的最大值。我们按边的权值从小到大加入新图, 很显然当一个点不是割点的时候这条边就是它对应的答案。先建出MST,然后动态加边。我们要维护每个点iii的每个子树jjj连到faifaifa_i的最早的时间hjhjh_j,同时要维...原创 2018-03-27 11:13:38 · 409 阅读 · 0 评论 -
Educational Codeforces Round 38 G:Shortest Path Queries(线段树+并查集)
传送门题解: x→yx→yx\rightarrow y的所有路径都可以由x→yx→yx\rightarrow y在dfsdfsdfs树上的路径抑或图中的环得到。然后问题变为了动态维护dfsdfsdfs树和所有环(支持删边加边),这个显然是不大可做的,不过如果只有加边操作就很简单了。然后发现可以离线,就可以把一条边的出现区间放到lognlogn\log n个线段树的节点上,然后从上往...原创 2018-02-22 16:13:19 · 292 阅读 · 0 评论 -
Codeforces #449 Div.1 E: Welcome home, Chtholly(分块+并查集)
传送门题意: 给一个序列,支持如下操作: 1.l,r,x a[l~r]所有大于x的数减去x 2.l,r,x 查询a[l~r]中x的个数。 n,l,r,x≤1e5n,l,r,x\le 1e5题解:好妙的一道题。。记一个块的最大值(不超过O(n)O(n))。并查集维护每个块中的所有权值。每次修改时判断当前修改的值的两倍是否大于当前块的最大值。若不大于,则暴力修改小的部分(小的部分+v)并打修改标原创 2017-12-19 11:09:11 · 309 阅读 · 0 评论 -
BZOJ3673,3694:可持久化并查集(Rope/主席树)
BZOJ3673 BZOJ3674用可持续化数据结构维护祖先。注意的是路径压缩的复杂度是错的,要写按秩合并。写BZOJ3673时: Rope真好用啊!!又是一道1KB题目。写BZOJ3674时: 沃日怎么一直RE?? 要了数据,跑了20s,果然O(nn√logn)O(n\sqrt{n}\log n)的复杂度水不过去。然而没有卡路径压缩,改成路径压缩之后过了。写了主席树0.1s过。。以后还是主原创 2017-12-18 10:46:26 · 460 阅读 · 0 评论 -
BZOJ4025: 二分图(线段树+并查集)
传送门题解: 每个边分给logn\log n个区间,之后从上往下做并查集即可。 注意按秩合并,这样才可以撤销操作。#include<bits/stdc++.h>using namespace std;const int Maxn=4e5+50;inline int rd(){ char ch=getchar();int i=0,f=1; while(!isdigit(ch)原创 2017-12-17 20:34:32 · 476 阅读 · 0 评论 -
BZOJ4105: [ThuSC2015]平方运算(并查集+线段树)
传送门题意: 支持区间平方(modp)\pmod p,区间求和(p≤10000p\le 10000且为质数)。题解: 每个数在平方意义下有循环节,且所有循环节的gcd≤70gcd \le 70,那么每个点维护7070个数就好了。在进入循环前会有一段不循环的区域(呈ρ\rho形),对于之前的直接暴力修改+并查集维护即可。#include<bits/stdc++.h>using namespace原创 2017-12-25 19:29:56 · 439 阅读 · 1 评论 -
Codevs2492:上帝造题的七分钟 2(并查集)
传送门题意: 支持区间开方求和。题解: 每一位数有效操作次数很少,所以并查集维护右边第一个不为1的数,暴力修改就好了。求和用树状数组。#include<bits/stdc++.h>typedef long long ll;using namespace std;inline ll read(){ char ch=getchar();ll i=0,f=1; while(!is原创 2017-11-25 11:45:55 · 206 阅读 · 0 评论 -
BZOJ1997: [Hnoi2010]Planar(并查集)
传送门题意: 给一个n个点大环,大环上有边,问这个图是不是平面图。(n≤200,m≤10000)(n\le 200,m \le 10000)题解: 二分图染色判断合法性很好想,但mm这么大不可能m2m^2建边。 听说有一个平面图定理:若图是平面图,那么m≤3∗n−6m\le 3*n-6。那么直接剪枝n2n^2判定就好了。#include<bits/stdc++.h>using namespa原创 2017-11-03 21:40:56 · 281 阅读 · 0 评论 -
luogu3940:分组(并查集)
传送门 小 C 在了解了她所需要的信息之后,让兔子们调整到了恰当的位置。小 C 准备给兔子 们分成若干个小组来喂恰当的胡萝卜给兔子们吃。 此时, nn 只兔子按一定顺序排成一排,第i i只兔子的颜色是ai a_ii。由于顺序已经是被 调整好了的,所以每个小组都应当是序列上连续的一段。 在分组前,小 C 发现了一个规律:有些兔子会两两发生矛盾。并且,两只兔子会发生矛 盾,当且仅当代表他原创 2017-11-02 18:16:02 · 407 阅读 · 0 评论 -
BZOJ4423: [AMPPZ2013]Bytehattan(并查集,对偶图)
传送门 比特哈顿镇有n*n个格点,形成了一个网格图。一开始整张图是完整的。 有k次操作,每次会删掉图中的一条边(u,v),你需要回答在删除这条边之后u和v是否仍然连通。题解: 因为强制在线,不能倒着来,其实这类连通性问题可以转化为对偶图上的问题。 将原图转化为对偶图,每次原图删边转化为对偶图加边,判断新加的边是否会形成环,若会,说明原图的两个端点在删边后不连通。#include<bi原创 2017-11-08 20:58:52 · 348 阅读 · 0 评论 -
codevs1074:[NOI2001] 食物链(并查集)
传送门 动物王国中有三类动物 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。原创 2017-10-03 17:18:50 · 381 阅读 · 0 评论 -
集训队作业2018:GAME(并查集)
题意:题解:把这个DP式子给列出来:fi=si+maxj{2∗aj−sj−fj}f_i = s_i + \max_j \{ 2*a_j-s_j- f_j\}fi=si+jmax{2∗aj−sj−fj}把这个后缀max\maxmax记为mmm的话,每次就是m=max{m,−2∗si−1−m}m=\max\{m,-2*s_{i-1}-m\}m=max{m,−2∗si−1−...原创 2018-11-16 16:12:07 · 667 阅读 · 0 评论