【CodeM初赛A 6】二分图染色 题解

转自https://www.nowcoder.com/discuss/28582

题目大意

       一幅有 n 个点的完全二分图,你要给每条边染色,可以染红、蓝、绿三种颜色,要求任意两条红边不共点,任意两条蓝边不共点。
       求方案数。
       n<=1e7


题解

       完全二分图转棋盘模型,即 N×N 棋盘上放黑白棋子,每个格子至多放一个,同行同列没有相同颜色的棋子。
       (注:这步不是必要的,不转模型其实也是一样的推法)

       用容斥原理,先假设每个格子可以放多个,再减去不合法的方案。如果每个格子可以放多个,一个不合法的格子所在的行和列都不会再摆放其他棋子,也没有两个不合法的格子同行同列。因此我们有计算式:

这里写图片描述

       其中 ANi 表示在 (Ni)×(Ni) 的棋盘上放单色棋子,使得没有棋子同行同列的方案数。 考虑从 (N1)×(N1) 棋盘递推到 N×N 棋盘,我们有:

这里写图片描述

       第一项是在第 N 行或者第 N 列上放一枚棋子或者不放的方案数,由于放两枚棋子的情况会被统计两次,最后还需减去摆两枚棋子的方案数,即第三项。

猜你喜欢

转载自blog.csdn.net/rzo_kqp_orz/article/details/73519206