题解 [Luogu P6596] How Many of Them

该博客介绍了如何求解满足特定条件的无向连通图数量,包括双连通分量的概念和割边的影响。通过动态规划的方法,利用转移方程计算不同节点数、割边数的图的数量,并给出了算法实现的思路和代码细节。
摘要由CSDN通过智能技术生成

luogu link

部分表述来源于李煜东的《算法竞赛进阶指南》。

题意

求满足如下条件的无向连通图数量:

  1. n n n 个节点组成,每个节点有编号,编号为 1 ∼ n 1\sim n 1n;
  2. 割边数量 ≤ m \leq m m 条;
  3. 无自环,无重边。

数据范围 2 ≤ n ≤ 50 , 0 ≤ m ≤ n ∗ ( n − 1 ) 2 2\leq n\leq50,0\leq m\leq \frac{n*(n-1)}2 2n50,0m2n(n1),输出答案对 1 0 9 + 7 10^9+7 109+7 取模的值。

题解

首先有个结论:

在无向图中,不含割边的极大连通子图称为双连通分量。若把每个双连通分量看做一个节点,则所有双连通分量和割边构成一棵树。

很容易理解:如果最后不构成树(有环),则环上的所有双连通分量必定能构成一个更大的双连通分量。


f i , j f_{i,j} fi,j 表示 i i i 个点包含 j j j 条割边的无向连通图数量。首先考虑 j > 0 j>0 j>0(下面解释为什么)。

计数 dp 有个思想:“围绕基准点构造一个整体”。我们以编号为 1 1 1 的节点为“基准点”,枚举 1 1 1 所在双连通分量节点数 k k k。这个双连通方案的构造方案数为 f k , 0 × C i − 1 k − 1 f_{k,0}\times C_{i-1}^{k-1} fk,0×Ci1k1 i − 1 i-1 i1 个节点选 k − 1 k-1 k1 个与 1 1 1 构成大小为 k k k 的双连通分量)。

如果 j = 0 j=0 j=0,那么 k k k 只能取 i i i 按照上式, f i , j = f k , 0 × C i − 1 k − 1 f_{i,j}=f_{k,0}\times C_{i-1}^{k-1} fi,j=fk,0×Ci1k1,我等于我自己了。

现在不考虑 j = 0 j=0 j=0,考虑图中其他部分。去掉 1 1 1 号节点所在的双连通分量,无向图会分成若干连通块,从每个连通块出发都有一条边连接到 1 1 1 号点所在的双连通分量上(这条边即为割边)。

g i , j , k g_{i,j,k} gi,j,k 表示 i i i 个点包含 j j j 条割边的有 k k k 个连通块的“有根”无向图数量,其中的“根”即为与 1 1 1 号点所在的双连通分量连边的那个节点。在此处处理更加简便。则去掉 1 1 1 号点所在的双连通分量后,图中剩余部分方案数为 g i − k , j − x , x g_{i-k, j-x,x} g

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值