abc253H
给定一张 \(n\) 个点、初始为空的图,以及 \(m\) 条边。现在会执行 \(n - 1\) 次操作,每次操作随机挑选一条边,加入到图中。
请回答,对于 \(i = 1 \sim n - 1\),\(n - 1\) 次操作后图为森林的概率。
注意允许图中重边,此时认为不是森林。
\(n \le 14, m \le 500\),无自环。
先将概率转化为方案,求有多少种图,然后乘上 \(\frac{(i - 1)!}{m^i}\) 即可。
先考虑简单情况:一棵树。
看到 \(n \le 14\),不难想到状压 DP,令 \(f(S)\) 表示集合内的点经过 \(|S| - 1\) 次操作后,形成一棵树的方案数。
考虑转移,枚举一条边,把它断开就会形成两个集合 \(U, V\),不妨枚举 \(U\),算出有多少条边连接 \(U, V\) 内的点,则可以从 \(f(U)f(V)\) 转移过来。当然这样会算重,每个树会被每条边算两次,所以除掉 \(2(|S| - 1)\)。(其实可以使用矩阵树定理 \(O(n^3)\) 直接求出来)
计算有多少条边连接 \(U, V\) 内的点,可以 \(O(2^nn^2)\) 求出一个集合 \(S\) 内包含了 \(num_S\) 条边,那么就有 \(num_S - num_{U} - num_V\) 条边连接两个集合中的点。
再考虑森林,设 \(dp(i, S)\) 表示集合 \(S\) 形成森林,且进行了 \(i\) 次操作,则 \(dp(|S| - 1, S) = f(S)\)。转移时可以随便选定一个 \(x \in S\),枚举 \(x\) 所在的树进行转移:
时间复杂度:\(O(2^nn^2 + n3^n)\)。
从简单情况入手,使用状压 DP 解决树的问题,在用类似方式解决森林即可。
浙公网安备 33010602011771号