2024.9.10 LGJ Round

C

n 个点,一开始 s 点是白色,其余黑色,你可以花费 pi 的代价使 i 点的颜色变成 ai 点的颜色。
若第 i 个点为白色,那么会有 wi 的代价,问贡献减去代价最大是多少。n5000

不难发现这是一个外向基环树的形式。如果 s 不在环上,就是一个树的形式。
树很简单,因为白点一定与根节点联通,只需要设计一个 O(n) 的 dp 即可。
但是环不一样,因为数据范围支持 O(n2),所以其中必有蹊跷。
我们注意到一个非常致命的问题,也就是环上的点变成了 1 之后,它还可以变为 0
所以现在树的部分变成这样:设 fu,i 表示 u 子树里,变换了 u 次的代价。这个是 O(n2) dp。
现在考虑环上的部分怎么办?我们可以得到环上每个点变化了 t 次,其子树内的最大贡献。
考虑在环上能合法的 t 集合是怎么样的呢?我们从 s 开始,t 序列不增,且极差 2
于是 dp 就做完了。

B

有一个 01 串 sq 次询问,问一个区间的所有子序列的权值和。
权值和的意思是:问至少多少次反转一个区间,使得其权值为 01 交替的形式。
n,q5e6

如果我们已知一个序列,考虑差分,反转一个区间,也就是反转差分数组的两个端点。
最后你要使得序列变成 01111... 或 11111...,权值显然是除去第一位,0 的个数除以二向上取整的值。
所以我们可以设计一个 dp,f0/1,0/1,g0/1,0/1 表示的状态是当前是否钦定第一位,当前 0 的个数奇偶性。
f,g 分别方案数和贡献和,我们可以设计一个动态 dp 来处理该过程,前缀矩阵积和前缀逆矩阵积即可。
但是常数需要带上 216,无法通过。
以下是题解做法:把权值写成 w=i=lr1[si=si+1],我们相当于要求 12w+[2w]
我们先算 w,考虑拆贡献,若 si=sj(i<j),那么会有 2rlj+i 的贡献。
那么,贡献也就是 2rl×si=sj,i,j[l,r].i<j2ij,差分,预处理 i,jl,si=sj,2ijil,l<jr.si=sj2ij
再算 [2w]w 的奇偶性也就是子序列长度和 [sst=sed] 之和的奇偶性,考虑计算每对 st,ed 的贡献。
对于 edst1 的特判,其他的,子序列长度奇偶个数相同,有 2edst2 种。

posted @   s1monG  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2023-09-11 2023.9.11 Online test
点击右上角即可分享
微信分享提示