树形 dp.
一个直接的想法是,若 $x$ 的水能流到 $y$ ,就连边 $x\to y$ ,若某个点有水,则它的全部后继也都有水.
直接建图的边数很爆炸,且只是一张普通的有向图,没有足够优秀的性质支持我们统计方案数,考虑对建图进行优化.
首先可以把同一行中,能通过本行及下方的点四连通的点缩在一起,它们的方案一定是一样的.
缩点后,连边时可以只连相邻两行之间的边,不难发现原来的所有限制可以通过传递得到,方案数不变.
此时图变成了一个有向森林,做简单的树形 dp 即可统计方案数,可以不显式建树,用并查集维护即可.
1 | //%std |