连通块不好统计,常见的套路是讨论点数和边数,但是有环的存在似乎并不是很好办。

注意到黑点四联通,讨论一下:

  • 如果上下不连通,左右也不连通,那么答案为 \((hw)^{k-1}\)
  • 如果上下联通且左右联通,那么答案为 \(1\)
  • 剩下的情况只有上下或左右联通。

那么注意到,如果将整个图缩成一个点,那么原问题答案就是:在 \(k-1\) 级分形中的连通块个数(只考虑上下 / 左右的情况下)。不难发现仅考虑上下 / 左右时,连通块应该是形如链的,也就是说此时点数和边数的差恰好为 \(1\),这样只需要将边数算出来就大功告成了。

由于上下 / 左右是等价的,这里只讨论“上下“的做法。

边有两种:图形之间的边,旧图形内部的边。记 \(f_i\) 表示 \(i\) 级分形的边数,接下来需要记录:黑点数、上下同为 \(1\) 的位置数、上下相邻位置为 \(1\) 的个数。分别为 \(h,g_i,f_1\),可以得到转移式:\(f_i=f_{i-1}h+f_1g_{i-1}\)\(g_i=g_1g_{i-1}\),矩阵快速幂。

代码:Submission #26329818 - AtCoder Grand Contest 003