复健笔记
复健计划启动于 \(2025\) 年 \(7\) 月 \(14\) 日。
先从数据结构开始吧~
P5314 [Ynoi2011] ODT
比较有意思的一个题目,感觉评黑有点高了(lxl,你还不赶紧过来卡常!)。
不妨我们先考虑不带修怎么做,较为简单,我们可以在每个节点上维护一个平衡树,将自身节点和父亲节点和儿子节点全部放进去,然后查询的时候查询排名为 \(y\) 的即可。
现在考虑待修该怎么做,我们发现如果在每个节点上维护着上述节点,将无法支持链剖链跳 \(\log n\) 次的特性,故我们考虑改善维护的信息。
进一步地,我们发现我们可以在节点上放弃用平衡树维护所有距离小于等于 \(1\) 的节点,我们考虑发生一次链跳时,一定是发生了一次轻重儿子切换,故我们可以在每个节点上维护所有的轻儿子,然后再查询时将重儿子、自身和父亲节点加入即可。
由于维护方式是单点查询和区间修改,所以不妨做一次差分,然后用树状数组维护修改。
时间复杂度 \(O(m \log^2 n + m \log n)\),由于用树状数组,常数较小,足以通过该题。
CF1592F2 Alice and Recoloring 2
哇哇哇很有意思的一个题啊。
我们容易发现一个有意思的,就是这个操作二和操作三是来骗你玩的,所花的代价高于两次操作一。
根据这一条,我们发现了可用的操作只有操作一和操作四。
进一步地,我们会发现操作四的一个缺陷,就是当某两次操作四的另一个角点的 \(x\) 或者 \(y\) 一致时,所花费的代价与四次操作一是一致的,即此时用操作四和操作一等价。
故最优时方案一定是让所有操作四的 \(x,y\) 都不一致,进一步地,我们还需要尽可能多的操作四,这里容易想到我们的二分图最大匹配,让横纵坐标分别成为两部点,搞匹配即可。
不过我们发现直接搞矩形取反不好维护,容易想到二维差分,操作一变成反转一个角点,操作四变成反转四个角点。
容易知道,只有操作四除了 \((n,m)\) 外的三个角点均为 \(1\) 的时候,我们用操作四才最优。
故思路总结为先找出所有满足最优进行操作四的点,把该点坐标在二分图上连边,最后在二分图上跑最大匹配,将匹配的点进行操作四,最后统计剩下有多少 \(1\) 即可。
时间复杂度取决于二分图所用算法。
P4180 [BJWC2010] 严格次小生成树
逆天了,为啥这个题没有做过啊?
首先不难意识到,你 kruskal 跑出来的最小生成树,跑完剩下的边加入肯定会成环,不难意识到你加入的这条边一定是环上最大的那条边,故容易意识到环上除当前边以外最大的那条边可以被换掉,此时不改变树的连通性。
故可以把每条没加进去的边当做询问,查询能否以最小的代价做替换即可。
时间复杂度 \(O(m \log n)\)。
嗨,你以为这么久没更新,难道真的停止复健了?
打了几场 CF 罢了,从 \(1043\) 开始都参加了/se
新题做起来还是很爽啊,不过脑子转的不够快/kk
懒得写成套题解了/shui

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号