自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(170)
  • 收藏
  • 关注

原创 树形DP相关题目总结

最近刷了一些树形DP的题目在此总结一下树形DP:就是在树上做状态转移的一种DP,一般是节点从深到浅(子树从小到大)作为DP阶段,写了很多题DP的第一维通常表示以某节点为根的子树,对每个节点,一般先递归子节点,在回溯的时候在进行转移需要注意的是,由于阶段是以子树划分,所以状态转移时只需考虑子树相应的转移部分,由于满足无后效性,所以想状态转移方程的时候不要考虑根节点对当前子树的影响!!! 无后效性...

2020-04-18 18:43:55 2228 1

原创 Educational Codeforces Round 151 (Rated for Div. 2)

有1必能构造,否则假如没有1,假如有2, 3必定能构造出大于等于2的所有数,否则只有2的话只能构造出偶数。思路:不难发现,x, y轴对答案的贡献是独立的,考虑其中一维,假如在同方向才能有贡献,分类讨论即可。棋盘上两个点同时从C出发到A, B, 都走最短路径,问最多重叠的格子数。, 那对于不互质的数要如何计算呢,不难发现假如不互质,设。中都是独立的,显然我们要让它不为子序列,贪心的考虑在。原函数图大体上是折线型的,不难想到答案最大的时候,的统计是唯一的,考虑枚举所有满足条件的。的整数,每个数可以拿多次,问。

2023-07-05 15:17:43 1079 1

原创 Codeforces Round 870 (Div. 2)题解(5/6)

这个模特的最大值,如果知道每个模特后面能跟谁,就相当于在一个dag上。的,我们可以通过dag图上转移使得一次转移第二维的所有位数,第二维。场演出每个模特有不同的rank, 要求选出模特的子集后重排列使得。, 满足偏序关系,所以排序后一定是dag图,那么我们考虑对每一个。个人,有人说谎,有人说真话,每个人都告诉你至少有。个人说谎,问是否矛盾,否则输出可能的说谎的人数。场演出的rank严格递增,且费用最大。即可,这个每个模特后面能跟谁也显然有个。个模特,每个模特一个费用,,问最大的x使得成回文。

2023-05-06 13:14:14 579 1

原创 2021GDCPC题解(12/12)

2021GDCPC题解(12/12)这场感觉挺无聊的,都是典题,而且很多题怪怪的A. An Easy Problem思路:经典k路归并排序,对于任意一个i属于[1,n][1, n][1,n], 若固定i,则j从[m,1][m, 1][m,1]是单调递减的,所以我们可以事先将所有i属于[1,n][1, n][1,n], j=mj = mj=m的kkk路起点丢进堆中, 每次弹出最大值,同时更新对应路的指针即可。#include<bits/stdc++.h>#define IOS ios::

2023-05-03 21:23:08 702 3

原创 2022 gdcpc题解(10/13)

我们能拿法力就拿法力,遇到敌人直接走,假如遇到敌人不够法力的时候,在0 - 1复用得到2点法力,最后的时候累计的时间减去累计法力 / 2 向下取整即可,考虑这个可撤销贪心的正确性,因为你在友军拿法力值的时候,你撤销等价于先少一点法力,再走斩消耗一点法力,所以相当于撤销2点法力,所以最后一定是2点2点法力可以全部考虑到0 - 1, 相当于提前预支代价。点,考虑走父亲还是儿子,同时考虑父亲是自己的最大还是次大,自己是父亲的最大还是次大,转移即可, 这里的值是无重复的,直接记录最大次大值转移即可。

2023-05-01 16:20:55 1143 1

原创 [Educational Codeforces Round 141 (Rated for Div. 2)题解

Educational Codeforces Round 141 (Rated for Div. 2)A. Make it Beautiful题意重排数组判断是否能够不存在任何元素等于其前面的数之和题解全部相同则不行,否则排序后最小最大次小次大即可构造出#include<bits/stdc++.h>#define io ios::sync_with_stdio(false);cin.tie(0);using namespace std;int main() { int

2023-04-24 12:55:33 416

原创 2021 icpc败犬记

沈阳后我们萎靡了很久,大家都没做题,因为上海站是诸神黄昏,所以我们完全没有抱任何希望,赛前也没有做题训练,开场我们迅速过了4题签到,随后coming进J,我和夜幕进K,coming提出bitset维护J的做法,我思考了一下发现很可行,但是这个trick我和他都知道,但是从来没用过bitset, 调试的过程中浪费了很多的时间。被卡常2h后,3题的做法我都会的情况下,只剩下一个小时一个都过不了,如果没有被卡常2个小时,我们至少多出一个半小时,我可以一个人把DP, SAM都写了,夜幕也可以去验证矩阵的系数。

2023-04-22 13:31:26 479

原创 「LibreOJ Round #6」花火 (线段树+扫描线)

title: 「LibreOJ Round #6」花火tags:算法竞赛线段树扫描线「LibreOJ Round #6」花火题意:n≤300000n \leq 300000n≤300000的一个排列,每次能交换相邻两个数,并且有一次机会交换不相邻的两个数,可以不用这个机会。问使这个排列升序最少操作几次。思路:考虑没有不相邻的话,显然就是逆序对数,对于第二种操作,我们可以把(i,hi)(i, h_i)(i,hi​)看成平面上的一个点,那么我们只有交换i,j,i<j且hi>h.

2022-05-04 20:54:43 333

原创 SAM总结

鸽了一年的总结x,很早就写好了,但是懒得传SAM总结后缀自动机是一种无比强大的数据结构,可以处理绝大多数字符串问题,本质上是一个字符串所有子串压缩后的自动机,下面将根据题目讲解sam的性质和应用一.初级应用1.多文本匹配,直接跑就好了,O(n+m)O(n+m)O(n+m)2.P2408不同子串个数题意:两种思路1.samsamsam每个结点的状态就包含了部分子串,每个状态的贡献是len[i]−len[link[i]]len[i]-len[link[i]]len[i]−len[link[i]]

2022-03-30 14:49:13 1602

原创 分治FFT小结

分治FFT小结分治FFT本质上是分治+FFT暂时两种套路1.fi=∑j=1ifi−jgjf_i=\sum\limits_{j=1}^{i}f_{i-j}g_jfi​=j=1∑i​fi−j​gj​ ororor fi=∑j=0i−1fjgi−jf_i=\sum\limits_{j=0}^{i-1}f_jg_{i-j}fi​=j=0∑i−1​fj​gi−j​ 即前面对自己转移直接卷积枚举每个点卷积的复杂度是O(n2logn)O(n^2logn)O(n2logn)考虑CDQCDQCDQ分治,先处理

2021-08-25 18:11:14 775

原创 后缀数组总结

后缀数组总结后缀数组是解决字符串问题的有力工具,本总结以题目套路为主1.P2408 不同子串个数题意:求字符串本质不同的子串个数思路:在后缀数组中子串表现形式为后缀的前缀,求出height数组后,每个字符串的贡献即为n+1−sa[i]−height[i]n+1-sa[i]-height[i]n+1−sa[i]−height[i],减去和上一个重复的,保证每个子串唯一即可#include<bits/stdc++.h>using namespace std;using ll=lo

2021-08-13 18:35:10 783

原创 2021牛客暑期多校训练营7 F.xay loves tress

2021牛客暑期多校训练营7F.xay loves tress题意:两颗树,构造最大点集,满足第一颗树上两两互为祖先,另一颗树上两两不互为祖先,且点集在第一颗树上连通思路:队友喂我题意的时候没和我说要连通,足足调了3h都没看出问题,最后半个小时我重看一遍题才发现…想了想就是个树剖2个log好像能解决掉,主席树好像可以1个log解决,但我不会首先明确点集在第一颗树上肯定是一条连续的从根到叶子上的链,点集不交在第二颗树的表现形式就是dfsdfsdfs序列不交。我们考虑在第一颗树上dfsdfsdfs

2021-08-07 22:32:53 160 1

原创 2021牛客暑期多校训练营5题解

2021牛客暑期多校训练营5题解B.Boxes题意:给你n个箱子装黑白球,开箱有花费,你可以花费c预知所有颜色,问知道所有颜色的最小花费。思路:一开始推了半天期望dpdpdp,式子列出来发现根本优化不了…考虑c的作用就是在全部同色的时候停止,我们考虑每个位置iii有贡献的概率,即[i,n][i,n][i,n]不同色的概率,显然是g[i]=1−12n−ig[i]=1-\frac{1}{2^{n-i}}g[i]=1−2n−i1​,另外最小花费显然要排序,还有记得和不取c,即全开的取minminmin

2021-08-01 17:44:28 637

原创 2021 牛客多校第二场补题( J

2021 牛客多校第二场补题( JJ题意:给nnn个数,问大小为kkk的集合的gcd的连乘思路:一开场就看了这题…思路也一眼出了,但是卡在欧拉降幂的大小判断上了…赛后一看rank1代码就懂了…我的做法是容斥,好像还有后缀和等做法(但我不会)f[i]f[i]f[i]为gcdgcdgcd为iii和iii的倍数的kkk大小子集的方案数,num[i]num[i]num[i]为集合中为iii及iii的倍数的个数,显然f[i]=C(num[i],k)f[i]=C(num[i],k)f[i]=C(num[i

2021-07-19 22:10:37 192

原创 cf1430F(dp/贪心好题)

cf1430F(dp/贪心好题)题意:现在有n波怪物,每波怪物起讫时间为l[i]~r[i],有a[i]只怪物,你现在有一把枪,弹夹容量为k,你开枪不用时间,一枪一个小朋友。但是换弹夹需要1s,并且换弹夹的时候,如果弹夹里有子弹,会将子弹扔掉再塞满。你需要在每波怪物的时间限制内将其杀光,并且花费的子弹数最少(包括扔掉的子弹),问你最少需要花费多少子弹。**方法一:dp **显然是求最少扔掉的子弹。我们考虑,在中间扔掉一定是不优的,需要扔掉的情况只有当后面一轮做不完的时候才扔,容易想到dp[i][0/1

2021-06-04 21:17:57 238

原创 codeforces Round 722(Div.2 A-E

codeforces Round 722(Div.2 A-EA.Eshag Loves Big Arrays题意:给一个数组,每次可以选一个子序列,将其中所有严格大于平均数的数删去,问最多能删几个数思路贪心,最后留下来的一定是最小的,所以答案是n-最小的数量,注意只有最小值不能删时间复杂度O(n)O(n)O(n)#include<bits/stdc++.h>using namespace std;int t,n,a[105];int main(){ cin>&g

2021-06-04 11:24:55 288 1

原创 bzoj3236 (莫队+分块)

bzoj3236 (莫队+分块)题意:nnn个数,mmm个询问,每次两个询问[a,b]值域数量[a,b]值域数值的数量思路:第一个询问乱做,第二个询问若没有值域要求莫队可解,带上值域要求莫队加树状数组可做,但是复杂度是O(nm)lognO(n\sqrt m)lognO(nm​)logn洛谷的数据或许可以卡过去,但是bzoj上强化显然不可以,我们考虑这个问题的瓶颈,在于单点插入,区间查询都是O(logn)O(logn)O(logn)的,区间查询的复杂度可以更劣,我们考虑块状数组,能够做到O(

2021-05-24 20:38:33 328 1

原创 洛谷P3604(美好的每一天 莫队+状压

洛谷P3604(美好的每一天 莫队+状压题意:给一串字符串,多个区间询问,问多少个子区间的字母可以组成回文串思路:考虑只有1个奇数次出现的字母+一些偶数次字母或者全都是偶数次出现的字母才是合法的,子区间计数可以通过枚举+桶+类似hash的办法迅速记录。我们将字母出现次数转为二进制后,显然只有(1<<i)(1<<i)(1<<i)或者全0的才能成功,我们通过枚举到当前字母插入或者删除的时候,通过维护前缀异或和记录,有贡献显然是cnt[a[x]]cnt[a[x]]cnt

2021-05-24 20:21:52 118

原创 cf1110D(线性DP好题)

cf1110D(线性DP好题)题意:给n张牌,要么(i,i,i)(i,i,i)(i,i,i)打出,要么三连环打出,问最多能打出的牌思路:首先很显然假如三连环数量超过2个,我们必定可以直接转为3个(i,i,i)(i,i,i)(i,i,i)的形式而不会更劣,所以三连环可以看作是用来补偿的一开始用dp[i]dp[i]dp[i]表示前iii种数所能打出的最大牌数,然后直接通过dp[i−3]dp[i-3]dp[i−3]转移,但是后来发现,这样的状态具备后效性,即之前的策略影响当前的选择。除此之外,我们发现d

2021-05-24 19:56:56 377

原创 cf 1312E(区间DP

cf 1312E(区间DP题意:给n个数,每次选两个相等且相邻的数合并变成ai+1a_{i+1}ai+1​,问最小长度思路:范围显然区间dpdpdp,我们考虑到对于某个区间来说,如果能压成一个数的话,这个值必定是唯一的若能知道哪些区间能被压成1个数字的话,我们就可以通过线性dp直接求解所以我们用dp[i][j]dp[i][j]dp[i][j]表示将区间[i,j][i,j][i,j]压成一个数字后的数字,0的时候说明无法成功,转移就是正常区间dpdpdp的转移了再之后就是一个非常裸线性dpdpd

2021-05-24 19:26:52 295

原创 cf 1304F2 (单调队列优化DP)

cf 1304F2 (单调队列优化DP)题意:给你nnn天,每天有mmm个拍照点,每次拍照是连续两天且拍照颜色不同,每次最多拍连续k段,连续两天就是2*k,每个拍照点有一个权值,求最大权值和思路:容易想到一个dpdpdp,dp[i][j]dp[i][j]dp[i][j]前iii天拍完了,第iii天从jjj这个地方开始拍,注意这个在转移前是一个相机的前一天,但是转移后得把一个相机的另一天计算进去。dp[i][j]=max(dp[i−1][l]+sum[min(j+k−1,m)]−sum[j−1]−重

2021-05-22 23:40:50 202

原创 cf1096 F(概率期望+贡献)

cf1096 E(概率期望+贡献)题意:给一个排列,一些数未知,问逆序对个数期望值思路:对于期望我们一般考虑期望dpdpdp或者直接贡献,即要么利用期望的线性性,要么直接公式,而对于pip_ipi​,一般都是已知方案除以总方案。这题显然可以拆成三种贡献已知数之间未知数之间已知与未知之间由E(x)=pixiE(x)=p_ix_iE(x)=pi​xi​容易得出第一种就是m!m!∗两两之间的逆序对\frac{m!}{m!}*两两之间的逆序对m!m!​∗两两之间的逆序对,显然可以树状数组得出

2021-05-20 20:59:53 181

原创 cf 1107E(区间DP好题)

cf 1107E(区间DP好题)题意:给你01串,每次你可以消去相同的字符并获得对应长度的值,问消去所有字符的贡献思路:神仙状态。首先考虑dp[i][j]dp[i][j]dp[i][j]为消去[i,j][i,j][i,j]后的贡献,考虑什么可以转移过去,我们发现如果只是单纯内部合并的都没有问题,但如果枚举xxx,[i,x]和[x,j][i,x]和[x,j][i,x]和[x,j]之间的贡献难以计算,此外当前状态无法终结,可能在未来被贡献。对于这种当前决策受未来影响的dpdpdp问题,我们预知未来的花费

2021-05-20 20:57:37 226 1

原创 拉格朗日插值总结

拉格朗日插值总结n+1n+1n+1个xxx不同的点可以确定一个nnn次多项式f(k)=∑i=0nyi∏i≠jk−x[j]x[i]−x[j]f(k)=\sum\limits_{i=0}^{n}y_i\prod\limits_{i\neq j}\frac{k-x[j]}{x[i]-x[j]}f(k)=i=0∑n​yi​i​=j∏​x[i]−x[j]k−x[j]​x不连续的时候的时候直接O(n2)O(n^2)O(n2)计算x取值连续的时候的做法(xi=i)(x_i=i)(xi​=i) O(n

2021-05-11 11:38:00 696

原创 洛谷P4278 带插入区间k小值(值域分块+块状链表

洛谷P4278 带插入区间k小值(值域分块+块状链表题意:给一个序列,三种操作,强制在线1.区间k小2.单点修改3.单点插入思路:一道非常恶心的题…首先树套树能做1、2,但是单点插入不好维护,而且树套树太难写了。考虑分块k小首先kkk小怎么做?和线段树一样,值域分块根号n叉树,记录每个数出现次数和每个块的次数,在三层的根号n叉树上查找O(n)O(\sqrt n)O(n​)即可解决区间k小那区间kkk小呢?再考虑序列分块,我们希望整块的信息O(1)O(1)O(1)获取,散块O(n

2021-05-08 10:01:45 369 1

原创 CC Chef and Churu(分块

CC Chef and Churu(分块题意:给一个长度为nnn的序列和mmm个区间两种操作1.单点修改2.维护第x个区间到第y个区间的和思路:先考虑暴力做,单独维护每个区间的和,这样的话总复杂度是O(Qm)O(Qm)O(Qm)的无法接受,复杂度的瓶颈在于每次都要所有区间一次,考虑对区间分块。所以我们要迅速知道某数的贡献,cnt[i][j]cnt[i][j]cnt[i][j]表示第iii块中jjj这个位置出现的次数。可以事先差分+前缀和预处理出cnt[i][j]cnt[i][j]cnt[i][

2021-05-07 23:42:43 304

原创 P4168 (静态分块

P4168 (静态分块题意:区间众数,强制在线思路:离线考虑莫队,在线考虑静态分块。块之间的贡献不独立,ans[i][j]ans[i][j]ans[i][j]表示块[i,j][i,j][i,j]中的众数,mx[i][j]mx[i][j]mx[i][j]表示众数的出现次数,通过增量法求解,O(n2/B)O(n^2/B)O(n2/B)考虑块与块之间的影响,用cnt[i][j]cnt[i][j]cnt[i][j]表示前iii个块中jjj的出现次数查询用散块暴力更新看是否对整块的答案有所贡献即可 $O(

2021-05-07 23:15:52 184

原创 洛谷P4135作诗(静态分块

洛谷P4135作诗(静态分块题意:查询区间内出现偶数次的数的个数,强制在线,值域O(n)O(n)O(n)思路:假如不强制在线的莫队板子题,但是强制在线怎么办呢,此时我们考虑静态分块,即不带修,放一些关键点,预处理关键点到关键点的信息来加速查询。显然块之间的贡献不是独立的,对于这种问题,我们一般直接预处理所有对应块的答案,然后考虑散块、整块之间的贡献。我们考虑f[l][r]f[l][r]f[l][r]表示从块l到块r的答案个数。可以直接通过增量法计算(枚举最左端的块l,再一直扫到n),复杂度O(n2/

2021-05-06 23:23:38 117

原创 loj 6546 (分块+斜率优化

loj 6546 (分块+斜率优化题意:给两个长度为n的数列A,B,三个操作对A区间加交换B中的两个数求区间最大Ai∗Bi{A_i*B_i}Ai​∗Bi​思路:看起来很像一道线段树,但我们发现区间加后根本难以维护Ai∗BiA_i*B_iAi​∗Bi​,对应的BiB_iBi​不同,难以维护最值所以序列考虑分块,但仍然有点麻烦,认真考虑答案www如何计算www=add[i]∗b[i]+b[i]∗a[i]add[i]*b[i]+b[i]*a[i]add[i]∗b[i]+b[i]∗a[i],本

2021-05-06 22:42:49 229

原创 bzoj 2002(分块)

bzoj 2002(分块)转化后的题意:给n个点,组成很多森林,每个点和父亲相连,父亲的编号比儿子大,两个操作1.断掉某个点和父亲相连的边,将整颗子树接到另一个编号比他大的点2.求i点在所在树的深度,根深度为1这是很典型的树上问题,可以用LCT解决,这里我这样转化只是为了提醒自己以后遇到类似模型的时候可以尝试往序列分块上想,考虑转为序列问题,减少码量思路:假如没有断边接边操作,容易想到O(n)O(n)O(n)解法,考虑每次修改都暴力更新所有前面的点的答案,O(n)O(n)O(n)更新O(1)O

2021-05-06 21:29:11 165

原创 P5356 YNOI2017 由乃打扑克 (分块

P5356 YNOI2017 由乃打扑克题意:区间加,区间第k大数思路:主席树又无法维护,考虑数列分块区间查询显然数列分块后直接统计答案的话,块的贡献是不独立且不正确的,一个块的kkk小值不一定是另一个块内kkk小值,线段树上求kkk小本质是利用二分统计个数。所以我们也考虑二分答案,统计所有块小于等于该数的总数有多少个,假如小于k的话,二分的答案太小了,否则太大了。这样的话查询是O(logw(n/B∗logB+B))O(logw(n/B*logB+B))O(logw(n/B∗logB+B)

2021-05-06 20:43:42 3725

原创 洛谷P2801 分块

洛谷P2801 分块题意:区间加,查区间>=kkk的数的个数思路:区间大于等于k容易想到主席树,但是区间加,也无法标记永久化,所以难以维护。考虑数列分块区间查询这里块贡献仍然独立,考虑块内维护有序序列,整块可以一次二分得到答案,散块暴力即可O(n/B∗logB+B)O(n/B*logB+B)O(n/B∗logB+B)区间加对于整块,直接打addaddadd标记即可,散块的话,暴力做,可以选O(BlogB)O(BlogB)O(BlogB)重构有序序列,但实际上我们发现可以通过记

2021-05-06 20:16:18 169

原创 洛谷P3372 (分块)

洛谷P3372 (分块)题意:区间加,区间和思路:线段树板子,但拿来练分块。数列分块,显然块与块之间的贡献是独立的,所以可以看成是三层的根号n叉树。区间加散块暴力加,同时更新区间和(类pushUp),整块直接打加法标记区间查询散块直接暴力算,整块答案=add[i]∗len[i]+sum[i]add[i]*len[i]+sum[i]add[i]∗len[i]+sum[i]复杂度为O(n/B+B)O(n/B+B)O(n/B+B),块大小等于n\sqrt{n}n​的时候复杂度最优#

2021-05-06 19:46:14 252

原创 一类点分治和点分树相关问题的总结

一类点分治和点分树相关问题的总结这些天刷了很多点分治和点分树的相关问题,来总结一下首先这些问题是比较套路化的,树上全路径问题,连通块问题的计数和判定,一般都是用到点分治/点分树。统计的办法有两种,一种是考虑容斥,一般用于计数,一种是枚举子树统计。前者好写常数较大,后者常数较小,细节较多一般求路径长度<=k的数目,每个路径长度准确数目,常用第一种,一般还可能通过排序形成偏序关系,利用数据结构维护,常见的有树状数组、单调队列按秩合并维护枚举子树统计的话,一般是这两种方法,要么当前根不保留,计

2021-04-16 15:48:45 204

原创 bzoj1095(点分治+堆)

bzoj1095(点分治+堆)题意:给一堆点,一开始全为黑点,每次取反一个点,问树上最远黑点距离思路:考虑建立点分树维护全局答案,显然对于分治重心来说,我们只用考虑子树对应最长链和次长链,由于要能删除,所以用两个堆组成可删堆来维护,一个维护当前点子树节点对父亲的贡献,一个维护所有儿子的前一个的最大值,再用一个全局堆维护,修改挺多细节的,自己当端点的情况得考虑,0也得考虑,具体看代码吧,只能说这题太阴间了维护起来,直接存份板子了,另外如果把优先队列换成pbds里面的二叉堆可以快一半,直接过了洛谷最后

2021-04-16 15:43:46 108

原创 gym101234 D (点分+FFT)

gym101234 D (点分+FFT)题意:问树上随机点分治的点数期望思路:考虑枚举任意两个点,u对v有1的贡献当且仅当v第一个删除,设距离为d,概率是1(d+1)\frac1{(d+1)}(d+1)1​,转化一下就是树上所有长度的路径数 cnt[i]i+1\frac {cnt[i]}{i+1}i+1cnt[i]​,但是统计每一种路径的条数我们无法用桶来统计,O(n2)O(n^2)O(n2),事实上这是卷积的形式,所以容斥统计用FFT维护即可,为了方便,边数+1即可,注意FFT是卷积过程 ,而这题

2021-04-16 15:42:35 163

原创 bzoj 4372(点分树+动态开点线段树

bzoj 4372(点分树+动态开点线段树题意:1.将树上与节点x距离不超过d的节点加上w2.单点询问思路:多次与某点相关的连通块问题,点分树套路题每个点建两颗权值线段树,一个维护自己分治区域中对应距离的标记,一个维护自己对父亲分治区域对应距离的标记,计算的时候容斥一下就好了,非常套路#include<bits/stdc++.h>#define ls lc[p]#define rs rc[p]#define lson lc[p],l,mid #define rson rc[

2021-04-15 13:25:07 168

原创 bzoj3924(点分树

bzoj3924(点分树题意:1.树上找点uuu使得∑dis(u,v)∗u\sum dis(u,v)*u∑dis(u,v)∗u最小2.单点修改点权思路:考虑uuu为当前决策点,对于其儿子vvv,移向其儿子的权值改变是(−sum[v]∗edge[i]+(sum[u]−sum[v])∗edge[i])(-sum[v]*edge[i]+(sum[u]-sum[v])*edge[i])(−sum[v]∗edge[i]+(sum[u]−sum[v])∗edge[i])改变小于0的时候,sum[u]<

2021-04-15 11:48:14 122

原创 cf293 E(点分治+树状数组)

cf293 E(点分治+树状数组)题意:统计边数<=L且边权重<=w的路径数思路:显然用容斥点分解决,按照w排序后是单调的,然后用树状数组维护l的数量即可,时间复杂度O(nlog2n)O(nlog^2n)O(nlog2n)#include<bits/stdc++.h>#define fi first #define se second using namespace std;typedef long long ll;typedef pair<ll,int&g

2021-04-15 11:16:33 171

原创 bzoj3730 (点分树

bzoj3730 (点分树题意:1.查询距离x点为k的点的权值和2.单点修改第x个点的权值强制在线思路:带修且多次询问距离某点建立点分树维护,每个点开两个树状数组,一个用于维护当前分治区域对自己的贡献,一个维护对父亲的贡献,更新和维护从当前点在点分树上条根即可注意计算的时候容斥,点分树的老套路了,算上本身后,减去当前对父亲的贡献,算上父亲自己的贡献,注意对于每个分治区域,树状数组的大小,一个是前一个分治子树的大小,一个是自己的分治子树的大小,为了方便,我都开成了上一次的大小,此外,树状数组需

2021-04-15 11:05:42 126

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除