有解的一个必要条件是 $a$ 是唯一的源点且 $b$ 是唯一的汇点。不妨设拓扑序为 $1,2,\ldots,n$,则 $a=1,b=n$。可以发现只需要每个 $1$ 以外的点选择一条向前的边,每个 $n$ 以外的点选择一条向后的边即可。
我们可以把每个点拆成入点和出点,对于每条边 $(u,v)$,在 $u$ 的出点和 $v$ 的入点之间连边。问题转化为了为每个点选择一条互不相同的邻边。这个问题有解当且仅当所有连通块都不是树,且有解时可以简单构造。
时间复杂度 $O(n+m)$。
Type: Editorial
Status: Open
Posted by: jiangly
Posted at: 2025-12-13 00:12:37
Last updated: 2025-12-13 00:12:42
有解的一个必要条件是 $a$ 是唯一的源点且 $b$ 是唯一的汇点。不妨设拓扑序为 $1,2,\ldots,n$,则 $a=1,b=n$。可以发现只需要每个 $1$ 以外的点选择一条向前的边,每个 $n$ 以外的点选择一条向后的边即可。
我们可以把每个点拆成入点和出点,对于每条边 $(u,v)$,在 $u$ 的出点和 $v$ 的入点之间连边。问题转化为了为每个点选择一条互不相同的邻边。这个问题有解当且仅当所有连通块都不是树,且有解时可以简单构造。
时间复杂度 $O(n+m)$。