专栏文章

浅谈环染色问题

算法·理论参与者 3已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@miotixvg
此快照首次捕获于
2025/12/03 00:54
3 个月前
此快照最后确认于
2025/12/03 00:54
3 个月前
查看原文

写在前面

模拟赛被这玩意创飞了。学习一下。

问题

长度为 nn 的环型序列,用 mm 种颜色进行染色,要求序列相邻的元素颜色不同,求方案数。

解决方案

下文中,记 colxcol_x 表示 xx 号元素的颜色。同时记 aia_i 表示前 ii 个元素染色的方案数。显然有边界 a1=0a_1 = 0a2=m(m1)a_2 = m(m-1)
考虑进行递推。分讨第 ii 个元素的情况。
  • col1=coli1col_1 = col_{i-1}。此时 colicol_i 的染色方案数为 m1m - 1。然后你发现由于 coli=coli1col_i = col_{i-1} 的元素颜色相同,所以可以考虑把它们看作一个整体,那么元素 1i21 \sim i-2 又成为了一个环!那么方案数就是 ai2a_{i-2} 了。所以此时的染色方案数为 (m1)ai2(m - 1)a_{i-2}
  • col1coli1col_1 \ne col_{i-1}。此时 colicol_i 的染色方案数为 m2m-2。类似地,由于 col1coli1col_1 \ne col_{i-1},元素 1i11 \sim i-1 成为了一个环。那么方案数就是 (m2)ai1(m-2)a_{i-1}
综上,ai=(m1)ai2+(m2)ai1a_i = (m-1)a_{i-2} + (m-2)a_{i-1}
nn 极大时,使用矩阵加速递推即可。
事实上,这个式子是可以求通项的。但是需要使用高中数学。
由于笔者是初中生,这里不进行扩展。感兴趣的读者可以自行搜集资料了解。

评论

2 条评论,欢迎与作者交流。

正在加载评论...