CF2023C C+K+S

题目大意:

有两个点数均为 \(n\) 的有向图,保证这两个图每个环长都为 \(k\) 倍数且强连通。
\(2n\) 个点每个点都有一个值 \(0,1\)。你需要在这两个图之间连 \(n\) 条有向边使得每个 '1' 点恰好连出一条边,每个 '0' 点恰好连入一条边。
是否存在这样的方案使得连完后的图每个环的长度也都是 \(k\) 的倍数。
\(n \le 2 \times 10^5\)

解题思路:

考虑一个强连通且每个环的长度都是 \(k\) 倍数的图,任意两点之间的所有路径长度模 \(k\) 相同。
然后我们求出从 \(1\) 出发到每个点的路,那么 \(u \to v\) 的路径长度模 \(k\) 相当于 \(dis_{v} - dis_{u}\)

那么假设新的环是从 \(a \to b \to c \to d\),而且 \(a,d\) 同一个图,\(b,c\) 同一个图。
假设我们给图染上色了,那么相当于要求两张图的 '1' 的颜色任意,而且 \(col_{b} = col_{a}+1\)\(col_{d} = col_{c} + 1\)

由于我们要对每个满足条件的新的环都满足这个条件,所以相当于将图 \(A\) 中的颜色个数循环移位一下必须与 \(B\) 的各个颜色出现次数相同。
并且我们只关心图 \(A\) 中与图 \(B\) 中 '1' 号点的相对颜色,所以我们可以钦定 \(B\) 中的 '1' 号点的颜色为 1,从而枚举图 \(A\) 中的 '1' 号点的颜色来判断。

判断也是简单的,只需要 hash 判断就行。
O(n)

posted @ 2025-08-26 15:06  positive_deviation  阅读(6)  评论(0)    收藏  举报