「Log」2023.11.21 小记

序幕

\(\text{6:40}\):到校,直接就开始改题了,忘写博客了。

发现点分治每次都是找重心出问题,写三次忘记给 \(stot\) 赋值三次。

\(\color{blueviolet}{P4149}\)

点分治板子,稍微维护一下一个长度路径至少需要几条边即可。

间幕 \(1\)

\(\text{7:05}\):写一下博客。

写完接着做题,看半天题没思路发现是动态点分治,原来找错题了。

找了道神仙题做做,自己思考未果,看题解看了大半个小时才看懂,开打!

打的很慢,打了两个多小时,样例没过,发现桶贡献计算错了,改完过样例,然后一遍过了,开心。

\(\color{black}{P2664}\)

静态点分治。

考虑颜色对端点的贡献,首先特殊化根的答案以及贡献,这部分是简单的,然后考虑子树内节点的答案以及贡献。

\(f_x\) 表示节点 \(x\) 的贡献,对于一个节点 \(x\),若其祖先节点中没有和其同色的,有 \(f_x = siz_x\),否则 \(f_x = 0\)

对于某点 \(x\),考虑一条 \(x\)\(y\) 的路径,将其分为 \(x \to \mathrm{root}\) 以及 \(\mathrm{root} \to y\) 两部分分别考虑贡献。

对于前者,考虑此部分的每个颜色,都会在 \(y\) 取到不同的点的时候造成一次贡献,所以每个颜色会产生 \(siz_{\mathrm{root}} - siz_{\mathrm{branch}}\) 的贡献,其中 \(\mathrm{branch}\) 表示 \(x\) 所在的子树。

对于后者,考虑每个节点都会造成一次贡献,所以有贡献 \(\sum \limits _ {y \notin \mathrm{branch}} f_y\)

考虑两部分贡献可能多算,因为颜色可能有重复,也就是说统计 \(\mathrm{root} \to y\) 部分贡献时只能累加不在 \(x \to \mathrm{root}\) 路径上的颜色的贡献,我们选择额外减去其贡献。

对于一个点 \(x\),一次计算中有其答案(设 \(x \to \mathrm{root}\) 路径上的颜色集合为 \(C\)):

\[\sum \limits _ {y \notin \mathrm{branch}} f_y - \sum \limits _{y \notin branch \land \mathrm{color}_y \in C} f_y + \sum \limits _{t \in C} \left(siz_{\mathrm{root}} - siz_{\mathrm{branch}}\right) \]

其中 \(\sum \limits _ {y \notin \mathrm{branch}} f_y = \sum \limits_{i \in T_{\mathrm{root}}} f_i - \sum \limits_{i \in mathrm{branch}} f_i\),然后写巨大多 DFS 就可以解决了。

间幕 \(2\)

中午吃了汉堡,然后和同学下楼溜达一圈,回来整理一下题目,写博客。

打了一会 4k,困了就睡。

\(\text{14:00} \sim \text{15:00}\):睡觉。

苏醒之后下楼溜达一圈,回来处理点分树。

思考效率疑似过低,看了好一会才看懂,打打打。

写了巨大长,感觉比上午的黑题还难。

细节处理上有点问题,改完之后处理一下空间也就过了。

调的过程中吃了晚饭,一般般。

\(\color{blueviolet}{P6329}\)

动态点分治模板,需要处理的部分很多,细节也一坨。

间幕 \(3\)

找下一道做,一直在看题解但是不懂,最后九点多被提醒认知错掉了,理解方式换一下马上就没问题了。

然后开始疯狂码题,然后就 WA 了。

然后发现细节处理有问题,贡献计算的时候缺了点东西,改完就过了。

\(\color{blueviolet}{P3345}\)

动态点分治,首先考虑在点分树上移动找最优点,然后动态点分治计算贡献即可。

尾声

计划了一下明天要做什么就睡了,晚安。

posted @ 2023-11-22 06:53  Eon_Sky  阅读(15)  评论(0编辑  收藏  举报