Live2D

2022/10/25 题解

天天考,tmd!!!!/fn

T3 [AGC008F] Black Radius

link

Solution#

tmd,只要方向一错就tm永远做不出来!!!!/fn

D(u,r) 表示以 u 为圆心,半径为 d 覆盖到的点集。我们考虑对于每个 Dr 最小的时候统计,可以证明的是不会出现 u0,u1 使得 D(u0,r)=D(u1,r)D(u0,r) 不是全集)。所以我们以下都在不考虑全集的情况下考虑,最后加 1 即可。

那么我们先考虑 i,si=1 的情况。对于点 u,可以发现的是,一定是统计到一个前缀,而如果 D(u,i) 需要在 u 被统计到,那么任意 v 都存在 D(v,i1)D(u,i)vu 的相邻节点)。 所以我们考虑以 u 为根来考虑,那么可以发现即是 i+1v 以外子树的最大深度。那么做个换根即可。

然后考虑 su=0 的情况,那么即是对于 i 判断是否存在 v 使得 D(v,r)=D(u,i)i 是能覆盖 D(v,r) 的最小半径,且 sv=1。可以证明的是,如果存在 v,那么以 u 为根时 u 的包含 v 的邻接子树必须都被覆盖到(可以使用反证法证明,如果存在未被覆盖的节点,那么取它与 v 的 lca 会更优)。那么取一个深度最小的一定最优。

然后你发现可以对于每个 u 把合法的区间用换根求一下就好了。

T4 [AGC011F] Train Service Planning

link

Solution#

根本没看/kk

不妨设 pi,qi 表示 0n,n0i 个站台的停留时间。我们考虑设 S(a,i)=j=0iaj,最后答案就是 S(p,n)+S(q,n)+2S(a,n)。另外注意到的是,因为我们是每 K 间隔发一次车,那么我们可以在 modK 的情况下考虑。又因为我们可以自己定 q0 且不会影响什么(相当于时间一起转一下),所以我们调整到 S(q,n)0(modK)

如果一个区间是双向的,那么没有限制,否则经过这个区间的两个时间不能相交,对于第 i 个区间即是:S(p,i)+S(q,i)(modK)[2S(a,i1),2S(a,i)]

那么我们注意到相当于我们可以一开始自己确定一个 x,每一次可以增加一个值使得在一个区间里,最后使得 Δ 最小。那么注意到的是,如果一个点不在一个区间里,那么调整到区间左端点一定更优。

然后用线段树之类的随便做就好了。

posted @   Dark_Romance  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2020-10-25 题解 2020.10.24 考试 T4 模板
2020-10-25 题解 2020.10.24 考试 T3 数列
点击右上角即可分享
微信分享提示
CONTENTS