Live2D

2022/10/25 题解

天天考,tmd!!!!/fn

T3 [AGC008F] Black Radius

link

Solution

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

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

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

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

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

T4 [AGC011F] Train Service Planning

link

Solution

根本没看/kk

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

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

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

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

posted @ 2022-10-25 21:23  Dark_Romance  阅读(32)  评论(0编辑  收藏  举报