ABC479
这 E-F 的 gap 是真大吧,40min 干掉 ABCDE 然后 F 死活不会
D
注意到 \(s \to t\) 要么直接一步到位要么找一个中转站,然后中转站必须在 \(s\) 的另一边(相对于 \(t\) 而言)就没了,非常 trivial
https://atcoder.jp/contests/abc479/submissions/79945120
E
需要通过手玩样例意识到树的重心这个东西。
首先可以发现如果将树分成两个连通分量 \(A,B\),不妨设较大的那个为 \(A\),然后树的重心 \(c\) 必须在 \(A\) 中。证明:已知 \(|A|>\dfrac n2,|B|<\dfrac n2\),假设 \(c \in B\),若删去 \(c\),会出现若干个连通分量 \(C_1,C_2,\cdots\),其中必有 \(A \subseteq C_x\),此时 \(|C_x| \ge |A| > \dfrac n2\),和树的重心的定义(删去 \(c\) 后,每个连通分量大小都不超过 \(\dfrac n2\))矛盾,故 \(c \notin B,c\in A\) 成立。
根据 CSP-S 2023 初赛单选 T12 的结论,奇数个结点的树有且只有一个重心。于是找出这个重心 \(c\) 出来并钦定其为根结点,把所有 \(x_i\) 全部赋值成 \(1+2+\cdots+(n-1)\),每次给子树的根 \(v\) 减去 \(v\) 和它的父节点的边的编号,最后再跑一遍 dfs 来把子树根结点的标记下传。感觉这是比较好写的一种实现方式,具体看代码。

浙公网安备 33010602011771号