Loading

[AGC005C] Tree Restoring

\(\text{solution}\)

欸嘿,收获紫题一道。

考虑一件事情,就是一个点到最远的点那么这个点一定是直径两个端点之一。

然后就非常好做了,\(a_i\) 最大的明显是直径的两个端点,其个数必须大于等于 \(2\),因为至少要有两个才能形成一条直径。

还有就是,直径中心的点的值我们是可以算出来的,设中间这个值为 \(mini\),那么 \(mini = \left\lfloor \frac{maxi + 1}{2} \right\rfloor\)\(maxi\) 就是直径端点的 \(a_i\),很明显,中间的这个值一定是最小的,可以自己画图推一下。如果有小于 \(mini\) 的点,就显然不可行。

然后就是,从 \(mini + 1 \sim maxi\) 点值必须有两个以上,因为直径都必须要两个。至于 \(mini\),看 \(maxi\) 的奇偶性,如果 \(maxi\) 是奇数,那么就必须只能有两个,如果是偶数,那么就必须只能有一个。

然后这道题就做完了。

posted @ 2023-05-31 11:33  Alexande  阅读(9)  评论(0)    收藏  举报