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 来把子树根结点的标记下传。感觉这是比较好写的一种实现方式,具体看代码。

https://atcoder.jp/contests/abc479/submissions/79954348

posted @ 2026-10-12 16:35  wwwidk1234  阅读(13)  评论(0)    收藏  举报