如果存在 $u$ 不在 $v$ 的子树内且 $w_u>w_v$,则最大的 $v$ 一定是可行的点。

此时,选择了这个点后,对方将无法选出一个点使得消除后剩下的点大于选择的点,因此可行。如果选择不出这样一个点,则无解。

首先想到枚举 $v$,并要求在 $O(\log n)$ 时间内完成判断。看到这个时间复杂度以及最大值,我想到的是线段树(BIT 也可以的)。

为了实现查询,要想办法使得区间连续,为了实现这个目标,可以使用 DFS 序,令其为 $dfn$,这时查询的最大值可以分成 $dfn$ 中的两段,前一段是 $[1,dfn_v]$,为了描述后一段,定义当前节点 $v$ 的子树中 $dfn$ 最大的点的下一个点为 $nxt_v$,于是第二段为 $[nxt_v,n]$,$nxt$ 的求法可以在 DFS 中完成,详见代码。

提示:注意可能取到空区间,线段树中注意判断!

code