做题记录

CF1671E

注意到不同子树间的答案独立。那么对于 u 为根的子树,其贡献应该是其左儿子乘右儿子再乘它自己的方案。那么由于它自己的方案只与 f(l),f(r) 有关,所以当其操作后能使答案贡献增加,当且仅当 f(l)f(r)。为了排除儿子自身的影响,我们将 f(x) 视为 x 为根子树中遍历得到字典序最小的序列。那么只要 f(l)f(r)u 就会对答案贡献 2 倍,因为可以不交换。时间复杂度 O(n2n)

CF1485F

考虑暴力 DP。定义状态函数 fi,j 表示前 i 个数,k=1iak=j 时的方案数。对于情况 1,我们有:fi,j=fi1,jbi。对于情况 2,我们有:fi,bi=j=VVfi1,bij。其中 V 为值域,我们可以将 V 视作 inf。那么有:fi,bi=j=VVfi1,j

整理一下,有:fi,j+bi=fi1,j,fi,bi=j=VVfi1,j。不难发现,我们每次相当于将第二维同时增加了 bi,而后面是个全局 sum。这里有个很典的 trick,我们记录 tag 表示整体右移的大小。那么这次转移较初始状态右移了 tag=j=1ibj。我们还原到初始状态,就有:fi,j=fi1,j,fi,bitag=sum。记 si=j=1ibj,有:fi,si1=sum。然后就做完了,由于第一个转移相当于直接赋值,所以只需要维护 fi,si1=sum,记录全局 sum 即可。答案也为全局 sum。时间复杂度 O(nlogn)

CF1582F1/F2

对于 F1,我们定义状态函数 fi,j 表示前 i 个数,异或和为 j 时最小的结尾。那么能做到 O(nV)

观察 fi,j 维护出的结果,我们发现。当 fi,j=x,且 x 是在 i 时用 ai 转移出来的。即 fi,j=ai。那么 k>ifk,j 如果等于 ai 那么选择的下标一定是 i。那么我们考虑定义 fi,j 表示最大值不超过 i 时,异或和为 j 时结尾下标的最小值。那么就能做到 O(V2) 了。

P3825

2-SAT 板子。

先考虑 d=0 的情况,那么对于第 i 场比赛,我们就只有两种选择。则现在问题转化为:对于每场比赛选两种情况中的一种,使得满足 m 条限制关系。然后这就是一个 2-SAT 问题,直接跑就行了。现在考虑 d>0 的情况,注意到我们 d8,考虑枚举每个 xa,b 还是 c。这样的时间复杂度是 O(3dm) 的,会炸。但是当 x=a 时,这场能选的车为 B,C,当 x=b 时,这场能选的车为 A,C。如果 x=ax=b 都无解,那么说明不管 xA,B 还是 C 都无解,所以 x=c 时一定无解。那么时间复杂度就变成 O(2dm) 了。

posted @   harmis_yz  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示