- 博客(1010)
- 收藏
- 关注

原创 关于拓展博客平台的一些想法
之前写算法竞赛相关的博客,主要是给自己学知识和补题用的。目前的打算是,后面发博客,可能会在知乎试点一段时间,但是整体感觉下来,有些群友现在用csdn会比较少,最近打了一场codeforces,写完题解之后,所以后面也有打算用这些媒体写博客、讲算法题的想法。当然csdn,可能在一段时间内,也会保持同步更新。有群友在群里问题,于是就把链接发了过去。反倒是知乎、B站这些用的比较多。整体还是看空余时间的情况吧。
2024-10-07 16:51:42
541

原创 补题list
数据结构2018CCPC吉林赛区 Lovers线段树2019中山大学程序设计竞赛 Party线段树牛客练习赛69 E.子串线段树The Preliminary Contest for ICPC Asia Nanjing 2019 I. Washing clothes李超树2019 ICPC Asia Xuzhou Regional H. Yuuki and a problem带修主席树The 2019 Asia Nanchang First Round Online Pro.....
2020-10-07 22:38:09
946
2
原创 The 2024 ICPC Asia East Continent Online Contest (II) (6/9/12)
平的概率是没有用的,因为平的话会开下一把,所以令a0=a0/(a0+a1),a1=a1/(a0+a1)否则,总可以将二进制里的一段00001,用1 -1 -1 -1 -1来表示,起到消去0的效果。那么就考虑其他学校的前ci个队和这个学校的前ci-1个队,哪些比当前队的分数大,统计个数。由于不能有两个0连续,手玩发现,当二进制末位是00的时候,也就是n%4=0的时候,无解。这类似求gcd时,大的那个数对小的那个数取模,然后递归到交换的情形,当前筹码小的那一方,在对面的筹码没有比自己少之前,是不能输的。
2025-02-10 20:12:32
650
原创 The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)
维护两个vector L、R,代表下一步要在[l,mid]和[mid+1,r]分治的vector。这样del里的元素,在并查集上找到其祖先时,可以用to数组确定其应该被放进L还是R。每次将x random_shuffle后,取出vector尾部的两个u、v,和已经被询问出来的元素再一起询问一次,就能确定出这个元素该放进L还是R。分治,假设当前解决到[l,r],要递归的vector是x,期望次数是6000的,实际跑得飞快,也没被卡掉。只剩一个元素时,L或R一定已经有元素,首先特判n=1的情况,其实也不用问。
2024-10-07 23:52:54
720
3
原创 The 2024 ICPC Kunming Invitational Contest F. Collect the Coins(二分)
如果端点所在的机器人接不住,而区间所在的机器人能接住,令区间所在的机器人去接,并变成一个端点,原来端点所在的机器人在这段时间可以往左右走,扩大活动范围,变成一个区间。如果两个都能接住,那么谁去接都可以,实际就是1、2两种情况的并,然后发现1、2两个区间是有交的,那么他们的并集仍然是一个区间,所以还是维护一个端点和一个区间。如果端点所在的机器人能接住,而区间所在的机器人接不住,令端点所在的机器人去接,区间机器人只能往在这段时间往左右走,扩大活动范围。不过二分也统一了这种情况,v 大于。所以,按时间顺序增序,
2024-10-07 23:25:47
931
原创 Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) (A-E3)
阳间比赛时间总出不太能做的阴间题印尼的场,final round质量也还ok,算是学了两个经典trick吧。
2024-10-07 02:56:25
951
原创 Codeforces Round 977 (Div. 2) E. Digital Village(树形背包 kruskal重构树 凸函数 闵可夫斯基和(min,+)差分优化)
dp[x]表示(x所在连通块里本来没有服务器)如果有装一个服务器的机会,装在x这个连通块里,使得x里的所有上网点,不再需要通过x的父亲fa[x]对应的原图的边进到另一个连通块里时,可以节省的最大权值之和是多少。形如h[i][z]=min(f[u][x]+g[v][y]+F(u,v),x+y=z)这种式子,但是用树形背包的trick,开大小是连通块大小的vector,复杂度就是O(n^2)的了,计u是左连通块的祖先,v是右连通块的祖先,w是这条边的权值,
2024-10-07 02:38:27
1289
原创 Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) D. Boss, Thirsty(前缀后缀max dp优化)
f[i][j]=max(k从j到m-1 g[i-1][k]+sum[j,k+1]+max(0,sufmax[k+2:m])) sum[k+1]-sum[j-1] (g2)f[i][j]=max(k从j+1到m f[i-1][k]+sum[j,k]+max(0,sufmax[k+1:m])) sum[k]-sum[j-1] (f1)g[i][j]=max(k从1到j-1 g[i-1][k]+sum[k,j]+max(0,premax[1:k-1])) sum[j]-sum[k-1] (g1)
2024-10-07 02:00:46
1282
2
原创 The 2024 ICPC Asia East Continent Online Contest (II) C. Prefix of Suffixes(kmp border性质)
形如[l1,l1+d1,l1+2*d1,...][l2,l2+d2,l2+2*d2,...],...,[lx,lx+dx,lx+2*dx,...]……所以考虑用总的[1,i]的b之和,减去已经没贡献的,也就是[x,i]与前缀的lcp小于i-x+1的,没贡献的x,一定会在某个x<=j<=i的位置变得没有贡献,只被减一遍之后,后面就不用减了。推导不难发现,满足[x,i]与[1,i-x+1]完全相同的x,是有贡献的x。根据题目要求的式子,假设当前匹配到了i,也就是从i-1转移到i的时候,
2024-10-03 17:13:29
941
原创 The 2019 ICPC China Shaanxi Provincial Programming Contest A. Digit Mode(数位dp 计数 指数型生成函数 暴力dp)
枚举这个随便选的临界位i(也就是不卡上界的临界位),也就是[1,i-1]都是卡上界的,本质是想知道已经选了ai个i,还有x个数可以随便选的时候,j是众数的方案数。复杂度大致是O(n*d*d*n*n*d)的,实际也跑不满,跑了600多ms。枚举第i位选了什么,枚举此时对应的众数j,以及枚举j最后选了多少个。枚举第i位选了什么,枚举此时对应的众数j,以及枚举j最后选了多少个。此外,还有一种情况,是前面全选的前导0,从某一位开始才有数的,那么情况类似,枚举有数的第一位i,也就是[1,i-1]都是全0。
2024-10-03 16:30:53
401
原创 The 2024 ICPC Asia East Continent Online Contest (II) K. Match(图计数dp 二分图匹配方案)
对于任意x∈[1,n],求二分图匹配数恰为x的方案数,答案对998244353取模。先选择左边z个点是哪些点,右边z个点是哪些点,然后乘上二者匹配的顺序z的阶乘。如果当前这位k是1的话,ai异或bj不能是0,所以只能递归下去匹配。长为n(n<=200)的数组a和b,给定一个k(k<2^60),维护一个多项式,表示二分图匹配数恰为0,1,...,x的方案数。考虑左边的点和右边的点是在二进制第几位的时候连的边,考虑每一位,递归下去,然后自底往上合并,k是0的话都有可能,要么递归下去被匹配,
2024-09-29 02:54:27
418
原创 Helvetic Coding Contest 2018 online mirror (teams allowed, unrated) E3. Guard Duty (hard) (计算几何 凸包)
这题有O(nlognlogX)的做法,但是比较复杂难写,不如这个好理解,就先只补这个了。这是一个O(n^2)的做法,比较巧妙,每次O(n)找到一组点,然后递归左右。求p和q的一组完美匹配,使得将两两匹配的点连成线段后,任意两条线段不交。2n(n<=1e4)个二维点,其中n个构成p数组,n个构成q数组,并且由于已按从小到大排序,则这两个点一定会在这些点构成的凸包上,由于每次操作是O(n)的,所以复杂度是O(n^2)的。前缀内满足p和q的个数相同,后缀也满足,O(n)求出这些点的凸包,不妨是下凸壳,
2024-09-29 02:22:11
300
原创 Codeforces Round 975 (Div. 1) D. Max Plus Min Plus Size(思维题 并查集/动态dp 线段树维护状态合并)
f[x][i][j][k]表示线段树的x节点,最大值有没有取到,左端点有没有选,右端点有没有选,如果最大值被包含在1 3 5里显然取1 3 5,否则换成2 4一定能取到最大值,是不劣的,对于最小值固定的话,对于1 2 3 4 5的连续段,要么贪心地取1 3 5,要么取2 4。如果存在一个连续段,使得选这个连续段中较多的那一半(奇数唯一,偶数均可)能取到最大值。则答案不需要减1,否则为了取到最大值需要反选,将答案减1。hhoppitree代码 + 官方题解。注意到最大值一定会被取到,
2024-09-28 19:48:44
895
原创 AtCoder Beginner Contest 371 G. Lexicographically Smallest Permutation(数论 枚举 扩展CRT思想)
后面的环长cyc[i+1]对应枚举mn[i+1]的时候,如果再遇到remain[p]的话,不能冲突,需要确定一个旋转次数x,使得x%cyc[1]=mn[1],x%cyc[2]=mn[2],等等。可以枚举cyc[i]的每个质因子p,把当前mn[i]%p的值记录下来,记为remain[p]找到符合约束条件的位置的最小值mn[2],再令x%cyc[2]=mn[2],并旋转。因为cyc[1]+cyc[2]+...=n,总环长是n,所以当前环长是可枚举的。其中cyc[1]是从前到后遇到的第一个环的环长,
2024-09-23 03:49:01
554
原创 Codeforces Round 972 (Div. 2) E2. Subtangle Game (Hard Version)(博弈+双指针 sg函数思想)
那么,如果l<=r且[l,r]内有下一个vector内必胜(sg=1)的元素,当前局面就必败(sg=0)不能再直接dp[i][j][k]表示数组a的第i个做开始局面时,位置(j,k)为起点时的获胜情况了。对于所有颜色v都处理出这样的位置集合,记为win[v],表示v作为最后一步时的所有获胜位置。这个位置序列,是一个第一维增序,第二维降序的序列,形如(1,4)(2,3)(3,2)这种。只要能走到win[a[l]]内任意一个元素的都是必败的,否则就是必胜的。那么对于序列a的最后一个元素,考虑所有获胜位置,
2024-09-23 03:37:33
501
原创 Codeforces Round 969 (Div. 1) C. Eri and Expanded Sets(线段树维护差分数组gcd+双指针+尺取)
由于gcd只会缩成因子,所以对于所有
2024-09-23 03:23:24
355
原创 2013-2014 Northeastern European Regional Contest (NEERC 13) I. Interactive Interception(思维题 二分好题 交互)
那么下一个位置区间,就是由当前位置区间l、r分别加上最慢速度lv、最快速度rv去生成,而历史每次询问出来的lp、rp,可以对lv、rv形成一个新的约束,最终收敛到lp=rp。询问的次数变多时,用限制条件去卡,速度实际是收敛的很快的。所以考虑二分位置p,用一个区间[lp,rp]去控制,100次,很容易想到是二分,但是check很难想。同样地,速度也用一个区间[lv,rv]去控制。两个未知量p、v,因为最后要求最终位置p,不是很能直观地证明,只是能大概感觉,
2024-09-23 02:43:57
443
原创 AtCoder Regular Contest 156 C. Tree and LCS(思维题 构造 数学归纳法)
求该路径上的点(x1,...,xk)和对应排列上的点(Px1,...,Pxk)的最长公共子序列都得到一个值,线性序列的话,1 2 3 4 5和5 4 3 2 1就可以了,也就是取逆序序列,此时最长公共子序列值为1。只有同时包含(u,v)的路径里能同时有u值和v值,并且这俩是满足线性序列两端的条件的。树上的话,考虑两个叶子u和v,令ans[u]=v,ans[v]=u,并且,去除掉两端的1和5之后,剩下的子段仍然满足要求。每次剥掉两个叶子,把产生的新叶子再塞进队列里,其实就是想想,线性序列怎么拓展成树上序列。
2024-09-23 00:20:30
320
原创 Codeforces Round 973 (Div. 2) F1. Game in Tree (Easy Version)(思维题 博弈)
如果能走旁边的链(也就是当前点,刨去标记链以外的子树中最长的链),使得对面走剩余的连通块无法比你大,就走旁边的链,并宣告获胜。维护实际是一个区间最值,可以用set或者st表。两个人的策略是一样的,把1到u的路径标记,否则沿着标记链,朝对面的方向走一步。
2024-09-21 03:18:53
850
原创 Codeforces Round 973 (Div. 2) E. Prefix GCD(n个数重排使得gcd前缀和最小 补写法)
每一步都取最小的即可,gcd log次就变1了所以暴力就完了。
2024-09-21 03:12:47
518
原创 Codeforces Round 972 (Div. 2) D. Alter the GCD(二分+gcd性质)
不妨枚举l,注意到 gcd(a[l,r]),gcd(b[l,r]),gcd(a[r+1,n]),gcd(b[r+n]) 有一个不同的 r 只有 O(log) 个。求换完之后的gcd(a1,a2,...,an)+gcd(b1,b2,...,bn)的最大值。操作:选择区间[l,r],将a的[l,r]区间和b的[l,r]区间的数一一对应互换。每次给定n(n<=2e5)和两个长为n的数组a,b(1<=ai,bi<=1e9)当然枚举r也可以,这里是枚举r然后二分那log种的,复杂度O(nlog^3),
2024-09-17 01:32:49
904
2
原创 The 2024 ICPC Asia East Continent Online Contest (I) L. Bull Farm(性质题+有向图可达性/最短路)
也就是需要满足,t[i][1]到t[i][n]这一行,除去t[i][j]以外,其他n-1个数两两不重复。也就是最早前dis[j]个按钮时,i是可以访问j的,此时把无向边也当成有向边做,最多也就加3n条边。2. 恰好只有一组数出现了两次,如1 2 2 4 5,此时只能空t[i][2]/t[i][3],dp[i][j]表示初始局面空出来的是j槽,按了i按钮后,空出来的是dp[i][j]槽,所以,基于这个数据范围,很自然暴力的做法就是,离线询问,从前0个处理到前l个,
2024-09-17 01:11:51
793
原创 The 2024 ICPC Asia East Continent Online Contest (I) C. Permutation Counting 4(二分图完美匹配奇偶 模拟高斯消元/并查集)
出现一个[l,r]的一行时,连边l-1和r,说明矩阵里有一行是表示sum[r] -sum[l-1]=r-l+1的。左边点[1,n],右边点[1,n],左边点i向右边点[li,ri]里的每个点连边,问有多少种完美匹配。线性相关(秩为0)时行列式值是0,单位矩阵E的行列式值是1,给1的两行换一换行列式是-1。做法是对于每个[l,r],连边l-1和r,如果出现环,说明线性相关,否则线性无关。比如,[1,2]、[3,3]、[1,3],三个中知道任两个,自然能推第三个,因为矩阵里每行的1是连续的,可以理解成前缀和,
2024-09-17 00:32:21
1239
原创 2024“钉耙编程”中国大学生算法设计超级联赛(9)hdu7529 树异或价值(树形dp+贪心)
如果到根的时候还是奇数的,那么相当于最终没有决定是多的这半是0还是1,将答案乘2即可。t(t
2024-08-18 02:16:02
505
3
原创 2024牛客暑期多校训练营10 J. Doremy‘s Starch Trees(预处理 换根dp/树上差分)
2. 对于T2树上每个非叶节点x,对于x的每个儿子y,都至少存在一个z,满足在T1树上,z和x有连边。找到T2的一个根满足T2是T1的starch tree,有多个输出任意一个即可,无解输出-1。所以将其转化为预处理T1上每个(x,z)边的贡献,一旦无根树T1上(x,z)是相连的,那么有根树T2有向边y->x(y是有根树T2上z->x路径上x相邻的点)就是合法的,T2有根树上,对于每个x的直连儿子y,都至少存在一个z,z在T2的y的子树里,其中T1是无根树,T2是有根树,但还未确定根,
2024-08-18 02:02:13
386
原创 2024牛客暑期多校训练营10 D. Is it rated?(01背包 用误差减少dp状态)
此时乘以pi=1e5也小于1e-14,乘以1e5场也不会超过1e-9,对答案的误差不会产生影响。所以可以倒着dp这个过程,就无后效了,dp[i]表示当前参加了i场时的最大rating和,那么(1-k)的x次方,当x到一定次数就很小了,试着400多次方的时候就会小于1e-19,然后这么暴力dp是O(n^2)的,不能接受,注意到k>=0.1,1-k<=0.9。有一个浮点系数k(0.1<=k<=1),对于n场来说系数是一样的,t(t<=1000)组样例,每次给定n(n<=1e5)场比赛,倒着看这个比赛的过程,
2024-08-18 01:52:09
225
原创 hdu7471 最优K子段(口胡题解 二分+贪心+随机化)
由于是sum[i]-sum[j]>=mid,i-j为质数,所以需要i-j是质数且sum[j]尽可能小。二分答案mid,能用最早的段达到mid则用最早的段达到,所以set维护前缀和及其下标。由于每n个数有n/logn个质数,所以期望意义上每logn个数会有一个质数。那么,用set维护没用过的前缀子段,set上暴力遍历若干个最小的值即可。随机是为了质数这个限制条件而生的。最大化min还是逃不出二分,
2024-08-12 04:14:26
293
原创 hdu7511 创作乐曲(口胡题解 线段树预处理+dp)
这个就是从前面第一个[a[i],a[i]+k]和前面第一个[a[i]-k,a[i]]的值转移。一个暴力的想法,是求满足相邻项差值不超过k的子序列最大长度,然后用权值线段树二分,当时转移是从前面>=a[i]和<=a[i]最接近的值转移。其实与泽与老师院赛那个题很像,求abs的最小值的dp,复杂度是O(sumq nlogn)的,不能接受。预处理找到这些位置之后,每次现dp即可。然后考虑优化掉这个logn的转移,
2024-08-12 03:55:54
319
原创 Educational Codeforces Round 168 (Rated for Div. 2) F. Chips on a Line(完全背包+斐波那契数列)
dp[i][j]表示当前选了i个数和为j的方案数,做个完全背包,将所有合法的y的状态求和即可。然后发现第i个数是fib[i],10个数,所以是不超过fib[10]的斐波那契数列。问题转换成,有x种数,其中第i种数是fib[i],在其中选n个数,假设他们的和是y。最少的斐波那契数可以dp预处理出来,当然贪心一步,直接从最大的转移递推出来也是对的。如果用最少个斐波那契数之和去表示y的时候,用了m个数,那么y就是合法的。可以把一个数都换成1和2,比如一个3可以换成1个1、1个2。
2024-08-12 03:48:41
312
原创 AtCoder Regular Contest 182 C. Sum of Number of Divisors of Product(矩阵快速幂+多项式贡献)
对于(x1+a)*(x2+b)*(x3)来说,拆解开,发现是等于x1x2x3+a*x2*x3+b*x1x3+a*b*x3。求所有长为k的序列(k∈[1,n](n<=1e18))的score,第i个数可以在[1,m](m<=16)中任取。而实际要求的式子是一个(1+x1)*(1+x2)*(1+x3)*(1+x4)*(1+x5)*(1+x6),比如,000111就可以表示当前(1+x1)*(1+x2)*(1+x3)的值,同理有,(x1x3)状态转移到(x1x2x3)这个状态,系数是b,
2024-08-12 03:41:25
960
原创 EPIC Institute of Technology Round August 2024 (Div. 1 + Div. 2) E. Cosmic Rays(单调栈)
如果(ai,bi)在栈中遇到相同的(aj,bi),就合并成一坨,新的这坨的是(ai+aj-now,bi)所以可以模拟这个最后一段加入的过程,维护一个单调栈,只有出现两面包夹的情况才合并。其实并不是一个难题,赛中d2花了太久时间,导致没时间写这个了,补一下写篇题解。而对于新来一个数(ai,bi)来说,如果前面的清完的时间比当前短就弹栈,那么就是维护一个单减栈,使得栈底的最大,栈底也就是最耗时的那个时间。对于栈顶来说,无法再使次栈顶弹掉,所以肯定是小于次栈顶的,对于每个时刻,输出栈底最耗时的即可。
2024-08-12 03:10:10
911
原创 EPIC Institute of Technology Round August 2024 D2. DFS Checker (Hard Version)(dfs序性质 lca)
(2)搜完一棵子树,跳到另一棵子树的根上,满足a[i]的父亲是a[i-1]的祖先,且a[i-1]是叶子。t(t<=1e4)组样例,每次给n(n<=3e5)个点的树,和一个初始dfs序序列,考虑dfs序,每次要么是下钻一个点,要么是搜完一棵子树,跳到另一棵子树的根上。考虑dfs序,dfn[u]一定是最小的直连dfn[v]减1,做法2是赛中的想法,是一个乱搞,但是也卡不掉,感觉也挺对的。(1)下钻一个点的时候,满足a[i]是a[i-1]的儿子。所以,只需满足性质的点是n-1个点,就是合法的dfs序。
2024-08-12 03:03:38
1048
2
原创 AtCoder Regular Contest 180 C. Subsequence and Prefix Sum (dp好题 辅助数组)
要么选了0,选了一个1,选了1个2,这种情况仍在f里统计,也只统计一次,从g转移回来即可。由于子序列当前和为0的时候,选ai和不选ai实际是一种方案,所以把这种情况择出来,要么选了0,选了一个1,这种情况和只选0是一样的,不在f里统计,在g里统计一次。给你一个长度为 N(N<=10)的整数序列 A=(A1,A2,⋯,AN)。做法挺巧妙的,g实际是一个辅助数组,dp还是很锻炼思维的。选ai的时候转移进g数组,不选ai的时候忽略,那么对于0 1 1 2来说,要么只选了0,还是在f里,
2024-08-11 20:19:58
235
原创 异或高斯消元模板(板子整理)
第i行的主元并不一定在第i位,倒着遍历每一行,消去得到第i行的主元的解。钦定第i个点在第i位为1,解满足这n+1个限制条件的异或高斯消元方程。对于无穷解的情况,秩r<n,这里钦定所有自由元均为0,每个点非0,所以每个点占据二进制位中的一位,G. XOR Neighbors 为例。将相邻点的限制列为一个方程作限制,
2024-08-11 18:02:00
417
原创 洛谷P10282 [USACO24OPEN] Smaller Averages G(归并排序优化dp)
转移的时候,dp[i][j]要从dp[x-1][y-1]转移过来,这两维都不是固定的,实际无法完成归并。然后考虑怎么优化这个O(n^4),还是dp[i][j]表示第一段以i结尾、第二段以j结尾的合法方案。枚举x<i,枚举y<j,[x,i]区间与[y,j]区间一共是O(n)个的,不妨按平均值从大到小归并,这样可以把所有平均值大的dp[i-1][y-1]所以,枚举x>i,枚举y<j,对区间[i,x]和区间[y,j]进行归并,容易想到O(n^4)的做法,就是枚举a的最后一段,b的最后一段,
2024-08-09 00:43:57
324
原创 Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2) F. Stardew Valley(包含必选边的欧拉回路 欧拉回路+dfs)
最终导致每条可选边被覆盖奇/偶次,最后把被覆盖奇数次的边取出来,就让这些必选点的度满足条件了。要求在选中所有必选边的条件下,选择一部分可选边得到一张新图,求出新图的一条欧拉回路。边用(u,v,c)表示连接u和v的边,c=1表示必选边,c=0表示可选边。如果树上必选点事偶数个,总可以两两取出来,使得每一对点标记一条路径,看完群友代码之后,想起了这个题,也是类似欧拉回路的性质,感觉忘完了。跑一遍欧拉回路,记录边编号,然后从指定的某个必选点出发,根据欧拉回路充要条件,必选点的度数都是偶数,
2024-07-29 20:13:32
488
原创 Codeforces Round #956 (Div. 2) and ByteRace 2024 F. array-value(trie经典问题 二分+01字典树)
对于长度>=2的区间[l,r],定义b[l,r]为区间[l,r]内ai异或aj(l<=i<j<=r)的最小值,t(t<=2e4)组样例,每次给定长度n(n<=1e5)序列a(0<=ai<=1e9)对于(a[i]^a[j])>=mid,即不存在(a[i]^x)<mid的x,先检查trie上是否有值违背规则,即(a[r+1]^x)<mid,双指针单增,把这样的x从trie上删掉,得到新的l’,所以把r+1对应的值a[r+1]加入到trie树前,枚举右端点,对于右端点r来说,已经得到了左端点l,
2024-07-29 02:27:59
355
原创 hdu7458 旅行(启发式合并+树形dp)
v3往u上的mp上挂的时候,维护的是v3为子树根,存在一个点p的类型是x,p到v的路径是没用过的最大代价和,也就是③,再加上u下其他子树的dp值之和,也就是1+2,得到1+2+③。所以,mp[v][x]表示v为子树根,存在一个点p的类型是x,p到v的路径是没用过的最大代价和,用于辅助转移。于是,now[u]表示对mp[u]上所有点打的全局子树加标记,now[v]表示对mp[v]的。把v往u上挂的时候,v需要加上sum-dp[v],加上now[v],再减去now[u]
2024-07-28 11:47:02
584
原创 2024“钉耙编程”中国大学生算法设计超级联赛(1)(9/9/13)
②3->1,3->2,也就是(f[1]<f[3]与g[1]<g[3]不同时成立)且(f[2]<f[3]与g[2]<g[3]不同时成立)dp[i][j][k]表示第一个子序列选的最后一个是ai,第二个选的最后一个是aj,第三个选的最后是ak时的方案数。①1->2,1->3,这要求f[1]<f[2]且g[1]<g[2]且f[1]<f[3]且g[1]<g[3],实际T(T<=1e4)组样例,字符集大小n(n<=26),第i种字符是ci,有hi个,sumhi<=1e7。
2024-07-20 22:54:02
1728
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人