题意是给一棵树,每个节点有颜色,只有白色和黑色,切成若干部分,使得每部分只有一个白色点.
f[i][0]代表i节点的儿子都符合条件,且 i 点所在的连通块有白色点.
当 i 点是白色点的时候.f[i][1] = 0因为他不可能存在一个连通块内并且不包含白色.f[i][0]由其所有的儿子的方案累乘.具体来说,对于一个儿子j,可以选择切割这条边,+f[j][0],也可以不切这条边 +f[j][1]
当 i 点是黑色点的时候.f[i][1]也是同理由其儿子选择切割与不切割转移来,f[i][0]则是由贡献白点的儿子转移,由于只能有一个儿子贡献白点,其他儿子贡献的是全黑点的连通块,所以各个儿子贡献之间是加法关系
这里的由于需要 i != j 的乘法积,可以直接先全部乘起来,再分别除f[i][0].但是由于有取模操作,并且模数很大且是一个质数,所以用逆元来代替除法.
不过xc大佬用的前缀后缀积,更简单但是开始的确是没想到.