有解的一个必要条件是 $a$ 是唯一的源点且 $b$ 是唯一的汇点。不妨设拓扑序为 $1,2,\ldots,n$,则 $a=1,b=n$。可以发现只需要每个 $1$ 以外的点选择一条向前的边,每个 $n$ 以外的点选择一条向后的边即可。
我们可以把每个点拆成入点和出点,对于每条边 $(u,v)$,在 $u$ 的出点和 $v$ 的入点之间连边。问题转化为了为每个点选择一条互不相同的邻边。这个问题有解当且仅当所有连通块都不是树,且有解时可以简单构造。
时间复杂度 $O(n+m)$。
As we are currently experiencing an overwhelming number of web requests for fetching user submissions, we have temporarily disabled the full submissions list. You must now be logged in to view submissions.
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)$。