2022/10/25 题解
天天考,tmd!!!!/fn
T3 [AGC008F] Black Radius
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
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\) 最小。那么注意到的是,如果一个点不在一个区间里,那么调整到区间左端点一定更优。
然后用线段树之类的随便做就好了。