8.26 疯狂星期六
Sum of SCC
有一种神秘竞赛图恰好有 \(m\) 条边 \((u,v)\) 满足 \(u<v\),求所有这种竞赛图的强连通分量之和。
\(n\le 30\)
tag:竞赛图,强连通分量,简单动态规划。
强连通分量是个很神秘的性质,好像不能直接设计状态,于是尝试发现性质。
竞赛图缩点后,剩下的点仍然构成一个竞赛图。而且这个竞赛图是个 DAG。不仅如此,它还符合竞赛图拥有的神秘性质:竞赛图缩点后会变成一条链状结构,其中前面的点向所有后面的点连边。
如果我们尝试把链从中间断开,可以发现分成的两个部分之间连的边,总是从前一个部分连向后一个部分的。所以我们发现,将竞赛图分为两个部分,且之间连的边总是从前一个部分连向后一个部分的方案数就是强连通分量数 \(+1\)。
然后就可以愉快转移了。设 \(f_{i,j,k}\) 表示第一部分有 \(i\) 个点,第二部分有 \(j\) 个点,有 \(k\) 条边 \((u,v)\) 满足 \(u<v\),直接枚举转移即可。
Clues
给你一个 \(n\) 个点,\(m\) 条边的无向图,根据这些信息可以知道图上有 \(k\) 个连通块,问用 \(k-1\) 条边将 \(k\) 个连通块联通的方案数,对 \(P\) 取模。
tag:Prufer 序列
如果把 \(k\) 个联通块看成 \(k\) 个点,我们实际上就是求 \(k\) 个点的生成树个数。由于每个 Prufer 序列对应一个生成树,所以生成树总数是 \(k^{k-2}\)。
现在要解决的问题是连边的点不确定。假如我们确定了每个连通块的度数,这是好求的。具体来讲,设连通块 \(i\) 度数为 \(d_i\),大小为 \(s_i\),则答案为:
即枚举完 Prufer 序列的生成后,再枚举每条边从那个点连出来。
那么总答案为:
这个 \(-1\) 很烦,于是我们搞出一个 \(c_i = d_i - 1\),那么式子变成这样:
发现这个式子很像我们的[[奇怪式子精选#多元二项式定理]]:
所以我们对式子进行转化:
然后直接求就好了。