数据结构
文章平均质量分 53
ez_yww
这个作者很懒,什么都没留下…
展开
-
【UOJ347】【WC2018】通道 边分治 虚树 DP
题目大意 给你三棵树,点数都是nnn。求 maxi,jd1(i,j)+d2(i,j)+d3(i,j)maxi,jd1(i,j)+d2(i,j)+d3(i,j)\max_{i,j}d_1(i,j)+d_2(i,j)+d_3(i,j) 其中dk(i,j)dk(i,j)d_k(i,j)是在第kkk棵数中i,ji,ji,j两点之间的距离。 n≤100000n≤100000n\leq...原创 2018-02-13 09:40:41 · 1353 阅读 · 0 评论 -
【XSY2665】没有上司的舞会 LCT DP
题目大意 有一棵树,最开始只有一个点。每次会往这棵树中加一个点,总共nn次。输出每次加点后树的最大独立集大小。 强制在线。 n≤300000n\leq 300000题解 显然是LCT。 那么要维护什么呢? 先看看DP方程:设fi,0f_{i,0}为以ii为根的子树中ii这个点不选的答案,fi,1f_{i,1}为ii这个点选的答案。显然 fi,0fi,1=∑vmax(fv,0,fv,1)原创 2017-12-23 21:32:26 · 335 阅读 · 0 评论 -
【XSY2524】唯一神 状压DP 矩阵快速幂 FFT
题目大意 给你一个网格,每个格子有概率是11或是00。告诉你每个点是00的概率,求11的连通块个数modd=0\bmod d=0的概率。 最开始所有格子的概率相等。有qq次修改,每次修改一个格子的概率。要求输出初始时和每次修改后的概率。 n≤200000,m≤3,d≤10,q≤1000n\leq 200000,m\leq 3,d\leq 10,q\leq 1000题解 很容易想到状压DP:前原创 2017-12-20 07:41:57 · 378 阅读 · 0 评论 -
【BZOJ4653】【NOI2016】区间 线段树
题目大意 数轴上有nn个闭区间[l1,r1],[l2,r2],…,[ln,rn][l_1,r_1],[l_2,r_2],\ldots,[l_n,r_n],你要选出mm个区间,使得存在一个xx,对于每个选出的区间[li,ri][l_i,r_i]都有x∈[li,ri]x\in[l_i,r_i]。 一个方案的代价是最长区间长度减去最短区间长度。 求最小的代价。 无解输出−1-1。 m≤n≤500原创 2017-12-01 11:00:32 · 324 阅读 · 0 评论 -
【XSY1545】直径 虚树 DP
题目大意 给你一棵nn个点的树,另外还有mm棵树,第ii棵树与原树的以rir_i为根的子树形态相同。这mm棵树之间也有连边,组成一颗大树。求这棵大树的直径+1+1。题解 我们先用DP求出以原树的第ii个点为根的子树的直径,那么以原树的第ii个点为根的子树中的某个点为一个端点的最长路一定在直径的一段。 然后我们遍历第ii棵树与其他树之间的边,求出每个点走到其他树的最长路。然后用虚树+DP合原创 2017-08-14 13:07:42 · 308 阅读 · 1 评论 -
【BZOJ2333】【SCOI2011】棘手的操作 treap合并
题目大意 有nn个节点,标号从1到nn,这nn个节点一开始相互不连通。第ii个节点的初始权值为aia_i,接下来有如下一些操作: U x yU~x~y:加一条边,连接第xx个节点和第yy个节点。 A1 x vA1~x~v:将第xx个节点的权值增加vv。 A2 x vA2~x~v:将第xx个节点所在的连通块的所有节点的权值都增加vv。 A3 vA3~v:将所有节点的权值都增加vv。 F1原创 2017-11-03 16:07:30 · 305 阅读 · 0 评论 -
【CF809E】Surprise me! 树形DP 虚树 数学
题目大意 给你一棵nn个点的树,每个点有权值aia_i,aa为一个排列,求 1n(n−1)∑i=1n∑j=1nϕ(aiaj)disti,j\frac{1}{n(n-1)}\sum_{i=1}^n\sum_{j=1}^n \phi(a_ia_j)dist_{i,j} n≤200000n\leq 200000题解ansf(d)F(d)F(d)f(d)=1n(n−1)∑i=1n∑j=1nϕ(原创 2017-10-17 15:53:09 · 590 阅读 · 0 评论 -
【AGC014E】Blue and Red Tree 并查集 启发式合并
题目描述 有一棵nn个点的树,最开始所有边都是蓝边。每次你可以选择一条全是蓝边的路径,删掉其中一条,再把这两个端点之间连一条红边。再给你一棵树,这棵树的所有边都是红边,问你最终能不能把原来的树变成这棵新树。 n≤100000n\leq 100000题解 考虑最后一条加的边,那么当前也有一条相同的蓝边。也就是说,如果把这两棵树合在一起,这两个点之间会有两条边。然后可以把这两个点缩成一个点。 所原创 2017-10-25 16:37:36 · 868 阅读 · 0 评论 -
【BZOJ3236】【AHOI2013】作业 线段树 分治 树状数组
题目描述 给你一个长度为nn的数列,还有mm个询问,对于每个询问(l,r,a,b)(l,r,a,b),输出1.区间[l,r][l,r]有多少范围在[a,b][a,b]的数;2.区间[l,r][l,r]有多少范围在[a,b][a,b]的权值。 n≤100000,m≤1000000n\leq 100000,m\leq 1000000题解 这道题莫队可以水过。 这里讲一个更优秀的算法。 建一棵权原创 2017-10-31 21:50:05 · 597 阅读 · 0 评论 -
【BZOJ1015】【JSOI2008】星球大战 并查集
题目大意 给你一张nn个点mm条边的无向图,有qq次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数。 q≤n≤400000,m≤200000q\leq n\leq 400000,m\leq 200000题解 我们可以用并查集维护连通块个数,可惜并查集不支持删除操作。 但是这道题没有强制在线,所以可以先删完所有点后再一个个加回来。 加边的时候维护连通块个数。原创 2017-10-23 15:19:15 · 213 阅读 · 0 评论 -
【BZOJ5020】【THUWC2017】在美妙的数学王国中畅游 LCT 泰勒展开
题目大意 给你一棵树,每个点有一个函数f(x)f(x)正弦函数 sin(ax+b)(a∈[0,1],b∈[0,π],a+b∈[0,π])\sin(ax+b) (a\in[0,1],b\in[0,\pi],a+b\in[0,\pi])指数函数 eax+b(a∈[−1,1],b∈[−2,0],a+b∈[−2,0])e^{ax+b} (a\in[−1,1],b\in[−2,0],a+b\in[−2,原创 2017-10-30 15:51:01 · 997 阅读 · 0 评论 -
【XSY2528】道路建设 LCT 可持久化线段树
题目描述 给你一个nn个点mm条边图,qq个询问,每次问你边权在[l,r][l,r]之间的边组成的最小生成树(森林)的边权和。强制在线。 n,m,q≤100000n,m,q\leq 100000题解 考虑离线做法。从大到小加边,用LCT维护当前的最小生成树。维护一棵线段树,第ii个位置表示当前的最小生成树中边权为ii的边的权值和。当一条边被加入时就在对应位置加上边权,删掉时就减掉边权。假设已经原创 2017-10-05 16:51:18 · 455 阅读 · 0 评论 -
【BZOJ3999】【TJOI2015】旅游 树剖
题目大意 给你一棵树,有nn个点。有qq个操作,每次要你从xx到yy的路径上选两个点,使得距离xx比较远的点的点权−-距离xx比较近的点的点权最大,然后把这条路径上所有点的点权+v+v。 n,q≤50000n,q\leq 50000题解 这种题没什么意思,直接树剖就好了。 线段树上每个点记录最大值,最小值,从左往右走和从右往左走的最大收益。 时间复杂度:O(n+qlog2n)O(n+q\l原创 2017-11-28 08:20:42 · 248 阅读 · 0 评论 -
【XSY2714】大佬的难题 数学 树状数组
题目描述 给你三个排列A,B,CA,B,C,求 ∑1≤x,y≤n[axay][bxby][cxcy]\sum_{1\leq x,y\leq n}[a_x<a_y][b_x<b_y][c_x<c_y] n≤2×106n\leq 2\times {10}^6题解 就是一个三位偏序。用CDQ分治可以做到O(nlog2n)O(n\log^2 n)。常熟小一点可以卡过。我在UOJ原创 2018-01-11 10:15:49 · 329 阅读 · 0 评论 -
【UOJ349】【WC2018】即时战略 LCT 动态点分治
这是一道交互题题目大意 有一棵nnn个点的树。最开始111号点是白的,其他点是黑的。 每次你可以执行一个操作:explore(x,y)explore(x,y)explore(x,y)。要求xxx是一个白点。该函数会返回从xxx到yyy的路径上第二个点的坐标并把该点染白。 要求你把所有点都染成白色。 设操作次数为ttt。 对于30%30%30\%的数据:这棵树是...原创 2018-02-12 16:52:45 · 1021 阅读 · 2 评论 -
【XSY2727】Remove Dilworth定理 堆 树状数组 DP
题目描述 一个二维平面上有nn个梯形,满足: 所有梯形的下底边在直线y=0y=0上。 所有梯形的上底边在直线y=1y=1上。 没有两个点的坐标相同。 你一次可以选择任意多个梯形,必须满足这些梯形两两重叠,然后删掉这些梯形。 问你最少几次可以删掉所有梯形。 n≤105n\leq {10}^5题解 先把坐标离散化。 定义AA为所有梯形原创 2018-01-19 08:56:54 · 284 阅读 · 0 评论 -
【XSY2707】snow 线段树 并查集
题目描述 有nn个人和一条长度为tt的线段,每个人还有一个工作范围(是一个区间)。最开始整条线段都是白的。定义每个人的工作长度是这个人的工作范围中白色部分的长度(会随着线段改变而改变)。每一天开始时你要选择一个人满足这个人的工作长度最小(如果有多个就选编号最小的)。把这个人的工作区间染黑。请你输出每天你选了哪个人。 保证工作范围中左端点和右端点单调递增。 n≤300000n\le原创 2018-01-10 08:41:39 · 247 阅读 · 0 评论 -
【XSY1551】往事 广义后缀数组 线段树合并
题目大意 给你一颗trie树,令si" role="presentation" style="position: relative;">sisis_i为点i" role="presentation" style="position: relative;">iii到根的路径上的字符组成的字符串。求maxu≠v(LCP(su,sv)+LCS(su,sv))" role="prese原创 2017-08-10 19:37:18 · 721 阅读 · 1 评论 -
【XSY2190】Alice and Bob VI 树形DP 树剖
题目描述 Alice和Bob正在一棵树上玩游戏。这棵树有nn个结点,编号由11到nn。他们一共玩qq盘游戏。 在第ii局游戏中,Alice从结点aia_i出发,Bob从结点bib_i出发。开始时,除了aia_i和bib_i这两个结点外,所有结点都没有染色。结点aia_i被Alice染色,结点bib_i被Bob染色。 接下来,两位玩家轮流移动,两位玩家移动步数之和为kik_i步。A原创 2018-01-23 17:08:47 · 381 阅读 · 0 评论 -
【XSY2732】Decalcomania 可持久化线段树 分治
题目描述 有一个陶瓷瓶周围有nn个可以印花的位置。第ii个与第i+1i+1个位置之间的距离为did_i,在第ii个位置印图案要tit_i秒。 机器刚开始在00号位置,可以以11单位长度每秒的速度移动。 一个位置只能印一个图案。 现在有mm秒,问你最多能印几个图案。 保证时间不足以绕陶瓷瓶一圈。 n≤100000n\leq 100000题解 肯定是先原创 2018-01-23 16:41:48 · 450 阅读 · 0 评论 -
【XSY2720】区间第k小 整体二分 可持久化线段树
题目描述 给你你个序列,每次求区间第kk小的数。 本题中,如果一个数在询问区间中出现了超过ww次,那么就把这个数视为nn。 强制在线。 n≤100000,ain,w≤nn\leq 100000,a_i题解 考虑整体二分。 先看看离线要怎么做。 现在我们要计算每个数对每个区间的贡献。 对于每个询问区间和每种数,让这个区间最右边ww个数对这个询问原创 2018-01-14 20:52:02 · 300 阅读 · 0 评论 -
【XSY2669】归并排序 树状数组 简单组合数学
题目描述 有一个长度为nn的排列n=2kn=2^k,你要把这个数组归并排序。但是在长度为22的时候有12\frac{1}{2}的概率会把两个数交换(就是有12\frac{1}{2}的概率返回错的结果)。有两种操作 11:交换两个数 22:询问排序后的一个位置等于一个数的概率。 k≤16,q≤105k\leq 16,q\leq {10}^5题解 这个排序有点奇怪。两个数a,b(a<b)a,b原创 2017-12-29 08:56:08 · 332 阅读 · 0 评论 -
【XSY2667】摧毁图状树 贪心 堆 DFS序 线段树
题目大意 给你一棵有根树,有nn个点。还有一个参数kk。你每次要删除一条长度为kk(kk个点)的祖先-后代链,问你最少几次删完。现在有qq个询问,每次给你一个kk,问你答案是多少。 n≤105,k≤109n\leq {10}^5,k\leq {10}^9题解 设ll为这棵树的叶子个数,显然当k>k>树的深度时答案都是ll。 下面要证明:答案是O(l+n−lk)O(l+\frac{n-l}{k原创 2017-12-29 08:06:47 · 459 阅读 · 0 评论 -
启发式合并&线段树合并&treap合并&splay合并
启发式合并 有nn个集合,每次让你合并两个集合,或询问一个集合中是否存在某个元素。 我们可以用平衡树/set维护集合。 对于合并两个A,BA,B,如果|A|<|B||A|<|B|,那么我们就把AA中的每个元素暴力加到BB中,否则就把BB中的元素暴力加到AA中。 对于一次把AA中的每个元素暴力加到BB中的操作,|A||A|会变成|A|+|B||A|+|B|,也就是说大小至少会翻倍,所以原创 2017-08-13 19:48:06 · 4672 阅读 · 0 评论 -
【XSY2715】回文串 树链剖分 回文自动机
题目描述 有一个字符串ss,长度为nn。有mm个操作:addl caddl ~c:在ss左边加上一个字符ccaddr caddr~c:在ss右边加上一个字符transl l1 r1 l2 r2transl~l_1~r_1~l_2~r_2:有两个ss的子串s1=s[l1…r1],s2=s[l2…r2]s_1=s[l_1\ldots r_1],s_2=s[l_2\ldots r_2]。原创 2018-01-11 11:02:18 · 317 阅读 · 0 评论 -
【CF768G】The Winds of Winter 可持久化线段树 DFS序
题目大意 给定一棵nn个点的树,对于树上每个结点,将它删去,然后可以将得到的森林中任意一个点与其父亲断开并连接到另一颗树上,对每一个点求出森林中所有树sizesize最大值的最小值。 n≤100000n\leq 100000题解 首先用DFS序+可持久化线段树求出删掉这个点后剩下的联通块的大小的最大值maxmax、次大值secsec、最小值minmin。这里要维护两棵可持久化线段树,一棵是DF原创 2017-10-19 19:14:06 · 377 阅读 · 0 评论 -
【XSY1284】【BZOJ3813】【清华集训2014】奇数国 线段树 数学
题目描述 给你一个长度为nn的数列,第ii个数为aia_i。每个数的质因子都只有前6060个质数。有qq个询问,每次给你l,rl,r,求ϕ(∏ri=lai)\phi(\prod_{i=l}^ra_i) 模数为1996199319961993,是个质数 n=100000,q≤100000n=100000,q\leq 100000题解 水题 ϕ(x)=x∏pi|x(1−1pi)\phi(x)原创 2017-10-03 19:34:32 · 251 阅读 · 0 评论 -
HDU 4585 题解
有n个人,每个人有一个战斗力。每个人加入少林寺时会和与他战斗力最相近的人比武。如果有多个人符合要求,输出战斗力最小的人。输出每个人和与他比武的人的编号。原创 2016-07-06 15:21:04 · 360 阅读 · 0 评论 -
HDU 3726 题解
有一个图,三种操作。 D x:删除第x条边。 Q x k:查询x所在的联通分量中,第k大的权值。 C x v:把第x个点的权值改成v。原创 2016-07-06 13:58:48 · 376 阅读 · 0 评论 -
HDU 5096 题解
实现一个acm的排名系统。原创 2016-07-06 11:09:44 · 297 阅读 · 0 评论 -
BZOJ 3110 题解
有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。原创 2016-07-06 10:56:29 · 341 阅读 · 0 评论 -
HDU 3436 题解
有一个队列,开始时第i个数是i。 有三种操作。 Top x:把x放到队头。 Query x:查询x是第几个数。 Rank x:查询第x个数。原创 2016-07-06 10:16:29 · 343 阅读 · 0 评论 -
HDU 4699 题解
实现一个类似编辑器的东西,有五种操作 I x:在指针前插入一个数x D:删除指针前的数 L:把指针往左移一个位置 R:把指针往右移一个位置 Q k:查询位置1~k的最大前缀和原创 2016-07-06 09:54:19 · 320 阅读 · 0 评论 -
HDU 3487 题解
有一个序列,两种操作。 CUT a b c:把提取出a~b这段区间,插入到剩下的第c个数后。 FLIP a b:翻转a~b这段区间。共有300000个数,300000个操作。原创 2016-07-06 09:46:01 · 308 阅读 · 0 评论 -
HDU 4417 题解
给你个序列,每次问l~r之间有几个数<=k原创 2016-07-06 09:37:43 · 277 阅读 · 0 评论 -
HDU 1890 题解
数组中有n个数,每次输出第i大的数所在位置,再翻转第i个数到第i大的数,如果有多个数大小相同,则在原数组中下标小的数优先。原创 2016-07-06 09:13:20 · 384 阅读 · 0 评论 -
HDU 2665 题解
给你一个序列,每次求一个区间的第k大 n,m<=100000;原创 2016-07-06 09:02:38 · 323 阅读 · 0 评论 -
HDU 4729 题解
有一棵树,给你边的容量。每次给你s,t,k,a,b,求s到t的最大流。k是总预算,a是加一条边的费用(容量为1),b是扩充一条边的费用。原创 2016-07-07 11:21:24 · 347 阅读 · 0 评论 -
HDU 4348 题解
给你n个数,a1~an,你需要实现一下四种操作: 1.C l r d:时间+1,把al~ar全部加上d。 2.Q l r:查询al~ar的和。 3.H l r t:查询在时间t时al~ar的和。 4.B r:返回时间t。原创 2016-07-07 11:29:19 · 281 阅读 · 0 评论 -
【BZOJ3669】【NOI2014】魔法森林 LCT
题目描述 给你一个nn个点mm条边的图,每条边有两个边权a,ba,b。请你找出从11到nn一条路径,使得这条路径上边权aa的最大值++边权bb的最大值最小。 n≤50000,m≤100000n\leq 50000,m\leq 100000题解 我们可以考虑求出当边权a≤a\leq某个数时边权bb的最大值。 先把边按边权aa从小到大排序,依次加入,用LCT维护当前边权bb的最小生成树。如果这两原创 2017-10-09 14:22:15 · 286 阅读 · 0 评论