青岛二中集训日报(D10-D12)

D9


模拟赛.我太菜了.上来直接判定不可做了.

其实感觉T1才是那个跳跃性最强的,拿着随机性质找暴力当正解了属于是.T2反倒比较自然,其实就是数位dp,被唬住了没敢细推而已.T3暴力还是很可拿的,转换根的地方有点技巧性,不过也没有那么邪门.总体而言是套吓人但不算难度特别大的题.

然后就是开题问题,不要恩做t1,也不要随便判不可做.当然不可做的思路一定要剪枝掉,在上面硬钻就浪费时间了.

T1

暴力:有个显然的枚举端点查询链的思路,暴力 \(O(n^3)\) ,考虑简单优化一下,维护与查询链中位数的最好方法只有值域线段树,因此用主席树,优化到 \(O(n^2logV)\) 期望25分.

考虑当前的矛盾点是什么,这种做法相当于要做 \(q=n^2\) 次链查询也就是说传统的数据结构维护是不可行的.这时对于计数问题的一个重要思想就是把贡献用某种方式合并,从而简化计算.但是这种中位数的问题显然不具有连续性,同时值域线段树也没法按分类合并.因此,直接把多条路径同时统计不怎么可行.

所以考虑从直接放弃前面的思路,从整体考虑问题.很容易想到枚举由哪条边作为中位数.又显然这样做可以把边排序,然后在前面的按1,后面按-1,找所有带该条边的权值为1的路径.

然后又回到了找路径的问题,虽然维护值变成和了,还是不可维护.

正解:这时候就要找题目的意图了:随机树,小数据范围.因此可以打 \(\Sigma sz\)\( \Sigma dep\) 的主意了,因此,完全可以dp了,然后在更新过程中,直接向上跳父亲,通过树高的大小,可以认为可过了.

到这里就是暴力dp的内容了.

启发 首先,不可做的思路一定要坚决剪掉,不然严重浪费时间,这种判断力也是能力的一部分.

对于题目给的每一个条件都要会利用,但是不要钻到里面,例如一个劲想办法用\(\Sigma sz\) 想要优化主席树做法.尽量让自己思路顺一点,同时要有一个推进的生成思路,不能停滞在一个点,而是尽可能向前,并拆解成子问题.

T2

暴力:硬算.

正解:考虑这种与二进制高度相关的计数问题,要么推式子,要么考虑数位dp,这是THUSC D1T1 的一个教训,不要被大数据范围吓到.一旦变成二进制数位dp了,直接对数据范围带 \(log\),看起来不可解的问题就可解了.当然不要教条.数位dp能够解决对数字本身的限制问题的计数.而本题的关键矛盾就是大计数与数字统计问题计算困难的矛盾,因此应该考虑到数位dp.

这个题仔细想想有两步大计算,推式子发现没有什么约化的意义,那就考虑数位dp.

首先分两步数位dp肯定是不行的,也是没有优化意义的,因此考虑同时统计.那么要填数的变成 \(a,b,x\) 不过 \(a,b,x\) 之间有很强的约束关系,因此考虑同时对三者填数.考量情况数与条件限制的矛盾,可以发现,需要维护的仅仅是对三个量的限制是否满足.因此可以有一个从低位向高位填数的递推dp方案,考虑填到第 \(i\) 位,分别维护方案数和答案.方案数可以直接更新,然后答案在方案基础上就很可算.复杂度 \(O(logV)\).

启示 一方面,对于看起来不容易的问题不要改变找基本或关键矛盾的原则,并作出正确的判断,也不要被一时认为此题非常困难的一种感性认知蒙蔽.找到数位dp后,这道题就变得很可做了.


T3

暴力:这道题不是很好入手,首先肯定不能随便断然后枚举,不然直接变大阶乘,期望分数0.

那么就要具体分析了.

考虑断开之后,整棵树变成了两棵树,对于每棵树,都可以内部匹配解决问题,此时这条边可以随便加,还有一种情况就是利用到了加上去的这条边,此时两棵树必然各有一个点还没有完成匹配.

先暴力枚举断哪一条边,考虑如何算有多少种加边方案.直接dp,设计状态,状态需要解决两个需求:更新状态:用子节点与父节点尝试匹配;统计答案:全匹配整个树或者剩一个点.

因此,设计 \(f_{u,0/1,0/1}\) 表示 \(u\) 自身匹配没有完成/已经完成,子树中除了根没匹配的节点数为 0/1 .发现转移是很容易的,不过需要注意维护的状态是连边的点的方案数,因此其实表示无没匹配的节点数的状态,是为了方便贡献,值只能是 0/1.要搞清楚转移过程.

此时 \(n^2\) dp已经得出.

正解: 其实到这一步,如果联想到换根dp就差不多了.不过处理起来没有一般的换根容易.

分析之后,发现贡献过程不可逆.但是贡献顺序不影响结果.这种情况也是可以dp的.核心矛盾既然是当前点和父亲点原dp和换根过程中贡献的方向不同.如果可逆就可以直接修改,如果不可逆,考虑记录除了当前点之外对父亲贡献的复合,把这个贡献贡献到当前点,这样就得到了逆向的兄弟子树,之前逆向过了父亲子树,再把父亲子树加上去.

具体实现上,可以按照dfn序正反跑dp,因此排除某个点时,只需要把贡献的前后缀分别加上去即可.

启发 快速进行合理的讨论并设计状态,然后自然转化到换根.

换根的基本思路是撤掉当前点对父亲贡献,再加上父亲对当前点的贡献.但是这道题有不可逆性,需要我们用一些新的思路.只能正向贡献与要求对一部分信息的贡献的矛盾,可以用前后缀来处理.

也就是对于撤销贡献问题,不一定非要可逆,也可以通过记录部分信息(如前后缀和)来还原,从而解决矛盾.

本文作者:youlv

本文链接:https://www.cnblogs.com/youlv/p/18262775/genshinlaunch

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   youlv  阅读(21)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起