hdu 5552 Bus Routes
考虑有环的图不方便,可以考虑无环连通图的数量,然后用连通图的数量减去就好了。
无环连通图的个数就是树的个数,又 prufer
序我们知道是nn−2其中又由于有n−1个边,每个边可以涂色,所以总共无环的方案数量是mn−1nn−2
那么现在就要算连通图的数量了。这个不如不连通图的数量好算。
不连通图的数量怎么算呢,原本想的是容斥,但是貌似不好实现,看了题解发现一种神仙思路。考虑固定一个点,并且让这个点连出一个连通块,剩下的点随意连,必然不连通。并且由于最后图中一定有这个点,这样是可以不重不漏计算所有情况的。
考虑用s(i)表示i个点的图的方案总数,就是(m+1)n(n+1)2,一共有n(n+1)2个边,可以选择m种颜色的一种或者不要这个边。
考虑f(i)表示i个点的连通图的方案数。
f(n)=g(n)−n∑i=1(i−1n−1)f(i)g(n−i)
这个看起来就很分治NTT
cpp
1 |
|