test0411

Posted on 2020-04-11 22:30  __wxyz  阅读(166)  评论(0)    收藏  举报

T1 树链剖分(decomposition)

  预期 : 30, 得分 : 30

  法一 : 易知按照DFS序给节点标号, 那么任意一颗子树内的所有节点的序号一定是连续的, 那么就可以按照DFS建立线段树, 对与每一个无限金丹点都可以在线段树上对其子树所在的区间进行更改操作, 查询时取dep最大的点

法二: 正着做不好用并查集, 反过来就可以, 每一个节点的并查集hd初始指向父节点fa, 如果该点被改成了无限金丹点, 那么改点的hd指向自身, 从头往后处理完所有op = 2的点, 再从后往前扫, 对于所有op = 1的点直接查询并查集hd, 对于所有op = 2的点将该点所在的并查集与其父节点所在的并查集合并即可

T2 天气之子 tenki

预期: 100, 得分 : 20

打表得 , 若f(x)表示x个人至少需要的座位数, y 表示最小的、大于等于x的, 2^n +1, 那么写个高精就可以了

T3 层层染君色 mafumafu

预期 :0, 得分 : 0

树链剖分啊调了我4h , 易知, dis(lca(a, b)) 即 dis(a) 与 dis(b) 的重叠部分, 可以通过线段树, 在每一个点x加入的时候, 对该点从根节点起经过的所有边都加上dis(x)的权值, 然后树剖优化, 有如下两种方法:

法一: 每一次直接将权值加入线段树

法二: 线段树维护两个值, 一个是权值和, 一个是个数和, 求解时, 对于每一个u(起始位置或每一条链的末端), 都将(为了不算重, 该点的子树和 - 该点来时的儿子的子树和)属于该点的子树内的所有点数和 * dis(u), 再加上fa[u] 到 top[u] 的权值和

所以我为什么要选法二

还有一个问题, 就是要用素数筛优化求F(x) 的复杂度, 对于素数 i, F(i) = i ^ k, 非素数则可以通过两个F值的乘积转移来, 这样O(1E7 log k) 就转成了 O(5e6 log k)