4.13 省选模拟赛 守卫 点分治 虚树
没脑子选手又来丢人了 写正解写不出来 暴力的特判也给写挂了。
看一眼题目范围 sumk<=500000 提示算法:虚树。
但是 考虑直接对原树做出来虚树 发现这样做需要换根dp求每个点能审查的最大范围。然后按边处理。
此时可以发现出现了问题 根本无法快速有效的查询x的父亲那边的点的数量 主席树不行 主席树+换根也是错误的。
自闭ing.考虑打暴力 对于nQ的暴力 直接换根dp一下。
对于ki==1的点 ??? 怎么不会做了..这种问题已经不能用简单的换根解决了。
考虑点分治 容易用树状数组维护 子集一减就好了 更容易的是 直接求出sum[k]表示距当前点分中心<=k的点的数量。
前者nlog^2 后者nlogn.
对于 是链的情况 不难想到区间覆盖性问题 可以直接排个序然后贪心求 写一个线段树也行。
这样就有50分了。
但是我上午执意写正解 写到自闭。
考虑100分 不难想到 点分树求答案 发现这样做需要预处理主席树 然后在每个点上查询 不过 重复的元素和距离的问题很难讨论清楚。
题解给了一种做法是 ki>1时 考虑建一棵虚树出来。按边处理。
怎么说 对于两个点 重合部分中间再建一个点 然后表示一下负贡献。
我不太能理解这一点 好毒瘤...
先咕了 放篇题解在这 LINK:Altria Pendragon 大佬的题解
自闭