做题记录 25.10.11
\purple\odot P7219 [JOISC 2020] 星座 3
从下往上扫描,用并查集维护极大不存在船的连续段
考虑反悔贪心,建立一棵树状数组,
扫描到
时间复杂度
代码
参考
QOJ #3869. Gastronomic Event
对于一种排列方式
转化为选择一种定向方式使得答案最大
用
定理
证明:
- 令
A 为 初始时 以a 结尾的有向路径数量(显然起点在子树a 内) - 令
B_{out} 表示以b 为起点的有向路径数量(显然终点在子树b 内) - 令
B_{in} 表示以b 为终点的有向路径数量(路径不经过a\to b ) - 显然上述操作不改变子树内部路径合法情况(要么不变,要么整体逆序,都不改变是否为有向路径)
- 若对
a\to b 操作,则原本的u\dashrightarrow a\to b\dashrightarrow v 不再计入答案,而u\dashleftarrow a\gets b\dashleftarrow w 计入答案,其中u,v,w 分别在A,B_{out},B_{in} 对应集合中,答案增量为\Delta_1=A(B_{in}-B_{out}) - 同理对
c\to d 操作增量为\Delta_2=D(C_{out}-C_{in}) - 因为所有以
c 为终点的路径后都可接上b\dashleftarrow c 从而变为以b 为终点,因此B_{in}\ge C_{in}+1 ,同理C_{out}\ge B_{out}+1 - 因此
(B_{in}-B_{out})+(C_{out}-C_{in})\ge 2 ,即B_{in}-B_{out} 和C_{out}-C_{in} 至少一个\ge 1 ,从而\Delta_1 和\Delta_2 中至少一个\ge 1 ,选择正的那个显然答案增加
由定理
定理
证明:
- 任意选择一个点
u ,定义一个点v\ne u 不合法当且仅当存在v 的儿子w 使得路径u-w 在u 处改变方向 - 若对于当前
u 不存在不合法点,则已经满足题目的条件 - 否则所有不合法点必然在
u 的同一子树中(不然选择两个不在同一子树中的不合法点,显然它们相应的儿子之间的路径至少改变两次方向) - 对于不合法点
v ,设它所在u 的子树的根为r ,即r 为u 的儿子且v 在子树r 中,则(u,r) 的定向与u 同其它儿子之间的边的定向不同,否则显然存在至少改变两次方向的路径 - 此时令
r 为根,显然不合法点的数量严格减少 - 经过若干次调整后,必然能够使不合法点数量变为
0
考虑枚举点
设定向为指向根的子树大小总和为
当
当 bitset 求出所有合法的
定理
证明:
- 假设选择的点为
u ,它>\frac n2 的儿子为t ,令d_x 为\min(\text{dis}(x,u),\text{dis}(x,t)) ,则答案为\sum d_x+sz_t+(sz_t+1)(n-sz_t) - 若翻转边
(u,t) ,则答案变为\sum d_x+(n-sz_t)+(n-sz_t+1)sz_t - 而
(\sum d_x+(n-sz_t)+(n-sz_t+1)sz_t)-(\sum d_x+sz_t+(sz_t+1)(n-sz_t))=0 ,答案不变 - 因此令
t 为新选择的点 - 显然反复进行以上操作最终
u 为重心 - 显然通过该过程可知存在两个重心时选择任意一个答案相同
因此实际上只需要选择任意一个重心,按之前的算法求出答案即可
总时间复杂度
代码
参考