7.27 day4 树论

悲报:

335->220

战绩:

100+100+20+0

T1

求子树size

T2

通过大眼观察严谨的证明后,我们发现 \(x_i\)\(x_i+1\) 的祖先的概率和 \(x_i+1\) 具体是什么无关:

我们令 \(x_i+1\) 一直跳父亲,直到编号小于等于 \(x_i\) 的那一次。因为父亲是等概率选取的,所以概率就是\(\frac {1}{x_i}\)

T3

考场想对了,但是大样例死活调不对,赛后发现vector锅了?!!!(100->20)

考虑是一棵树的情况,我们可以先统计通向儿子的边那些没使用过,令他们指向自己,看自己的奇偶,如果是奇,就把通向父亲的边也指向自己

对于一张图,找出每个连通块的一颗dfs树,唯一不同的是会有一些返祖边,直接令他们指向自己即可

T4

35->0 写了没交,贪心(没有正确性)其实可以混35分的

对于每个点i,想要保住它,那么就必须在他到包含他且离他最近的区间右端点之间放置防护罩即在\([i,R_i]\)中选择一个点放置防护罩。

对于一个\(j \in [i,R_i]\),同理,他的区间为\([j,R_j]\)\(R_j\le R_i\),那么得出一个结论,对于左端点\(i \in [1,n]\)的n种区间,要么包含,要么不交

依此,我们可以按包含关系建出一个森林,树上每个点即代表原序列上一个位置,如果我们使一个点被保护,那么他到他的祖先上的所有点都会被保护,因此我们贪心的选择叶子节点,把每一棵树长链剖分,对所有链长排序,选前k大即可。

posted @ 2023-07-27 14:48  Linnyx  阅读(8)  评论(0编辑  收藏  举报