转自https://www.nowcoder.com/discuss/28582
题目大意
一幅有 n 个点的完全二分图,你要给每条边染色,可以染红、蓝、绿三种颜色,要求任意两条红边不共点,任意两条蓝边不共点。
求方案数。
n<=1e7
题解
完全二分图转棋盘模型,即
N×N
棋盘上放黑白棋子,每个格子至多放一个,同行同列没有相同颜色的棋子。
(注:这步不是必要的,不转模型其实也是一样的推法)
用容斥原理,先假设每个格子可以放多个,再减去不合法的方案。如果每个格子可以放多个,一个不合法的格子所在的行和列都不会再摆放其他棋子,也没有两个不合法的格子同行同列。因此我们有计算式:
其中
AN−i
表示在
(N−i)×(N−i)
的棋盘上放单色棋子,使得没有棋子同行同列的方案数。 考虑从
(N−1)×(N−1)
棋盘递推到
N×N
棋盘,我们有:
第一项是在第
N
行或者第
N
列上放一枚棋子或者不放的方案数,由于放两枚棋子的情况会被统计两次,最后还需减去摆两枚棋子的方案数,即第三项。