考虑从两个状态同时移到同一个状态,然后比较这两个状态是否相同。考虑以任意顶点为根,把所有顶点按深度从大到小排序,依次为 $u_1,u_2,\ldots,u_n$。我们希望把一个状态移至尽可能深的状态,即 $a_{u_1},a_{u_2},\ldots,a_{u_n}$ 的字典序最小($a_u$ 表示顶点 $u$ 上是否有人)。
按深度从大到小枚举顶点 $v$,我们需要判断是否能把一个人移到顶点 $v$。比较麻烦的情况是一个顶点的两个孩子相互卡着都移不上来。为了解决这种情况,我们可以先把每个人往距离 $v$ 更远的方向移一步(如果能移动的话)。可以证明,如果能把一个人移到顶点 $v$,那么在这次移动之后一定有一个人可以直接移到 $v$。
时间复杂度 $O(n^2)$。