检查第一个条件很简单,只需要无向图没有环并且每个点的入度不超过 $1$。
对于第二个条件,当加入 $u$ 到 $v$ 的边之后,假设 $v$ 可达的区间是 $[l,r]$,那么对于 $u$ 的每个祖先 $x$(包括 $u$),$x$ 在之前可达的区间必须与 $[l,r]$ 相邻。这也就是说,要么 $u$ 的子树包含了该连通块的最小值且最小值等于 $l+1$,要么包含了最大值且等于 $r-1$。考虑每个连通块的两条路径:从根开始不断走向编号最小(且比自己小)的孩子得到的路径 $L$ 和不断走向编号最大(且比自己大)的孩子得到的路径 $R$。上述条件也就相当于 $u$ 需要位于对应的路径上,加边之后路径上在 $u$ 之后的点会被删除,替换成 $v$ 的子树中对应的路径。
上述条件可以用并查集和链表快速维护,时间复杂度 $O((n+q)\alpha(n))$。