Solution -「ZJOI 2015」「洛谷 P3343」地震后的幻想乡
\(\mathscr{Description}\)
Link.
给定连通图简单无向 \(G=(V,E)\),对于 \(e\in E\),有边权 \(t_e\) 独立均匀随机生成自 \([0,1]\)。求 \(G\) 的生成树最大边权最小值的期望,不取模。
\(n\le10\)。
\(\mathscr{Solution}\)
E(\min_T\max_{e\in E_T}t_e) &= \int_0^1 P[\min_T\max_{e\in E_T}t_e>x]~\text dx\\
&= \int_0^1 P[\forall T,\exist e\in E_T,t_e>x]~\text dx\\
&= \int_0^1 P[G\text{ is not connected by }e\text{ whose }t_e<x]~\text dx\\
&= \int_0^1 \sum_{E_1\cup E_2=E,E_1\cap E_2=\varnothing}[G\text{ is not connected by }E_1]x^{|E_1|}(1-x)^{|E_2|}~\text dx\\
&= \sum_{E_1\cup E_2=E,E_1\cap E_2=\varnothing}[G\text{ is ...}]\int _0^1 x^{|E_1|}(1-x)^{|E_2|}~\text dx\\
&= \sum_{E_1\cup E_2=E,E_1\cap E_2=\varnothing}[G\text{ is ...}]\sum_{i=0}^{|E_2|}(-1)^i\binom{|E_2|}{i}\int_0^1 x^{|E_1|+i}~\text dx\\
&= \sum_{E_1\cup E_2=E,E_1\cap E_2=\varnothing}[G\text{ is ...}]\sum_{i=0}^{|E_2|}(-1)^i\binom{|E_2|}{i}\frac{1}{|E_1|+i+1}\\
&= \sum_{u_0\in S\subsetneq V}\sum_{i=0}^{\operatorname{inc}(S)}g(S,i)\sum_{j\ge t=i+\operatorname{cut}(S,V\setminus S)}\binom{\operatorname{inc}(V\setminus S)}{j-t}f(j).
\end{align}
\]
以上是草稿,来解释一下。
从 \((1)\rightarrow(7)\),其实就干了一件事——把积分丢到简单函数上消掉。毕竟我也只会求简单函数的积分。\((8)\) 的目的是把边的枚举更多的变为点的枚举。其中,\(f(|E_2|)\) 即对 \((7)\) 中第二层和式的换元,这个可以直接求。第一个和式的 \(u_0\in S\subsetneq V\) 是常见子集 DP trick,即枚举 \(E_1\) 在 \(G\) 下形成的包含某个特定结点的连通块,\(g(S,i)\) 表示在 \(S\) 的诱导子图内删掉恰 \(i\) 条边,使得子图连通的方案数。子集 DP 一下可以 \(\mathcal O(3^nnm)\)(上界很粗)求出来。那么本题就结束了。
  提示:2022 年了,选手可以使用 __int128 和 __float128。
\(\mathscr{Code}\)
/*+Rainybunny+*/
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i)
typedef __int128 LL;
typedef __float128 LD;
const int MAXN = 10, MAXM = 45;
int n, m, adj[MAXN + 5], inc[1 << MAXN];
LD f[MAXM + 5];
LL bino[MAXM + 5][MAXM + 5], g[1 << MAXN][MAXM + 5];
inline void init() {
    bino[0][0] = 1;
    rep (i, 1, m) {
        bino[i][0] = 1;
        rep (j, 1, i) bino[i][j] = bino[i - 1][j - 1] + bino[i - 1][j];
    }
    rep (i, 0, m) {
        rep (j, 0, i) {
            f[i] += (j & 1 ? -1. : 1.) * LD(bino[i][j]) / (m - i + j + 1.);
        }
    }
    rep (S, 1, (1 << n) - 1) {
        inc[S] = inc[S ^ (S & -S)]
          + __builtin_popcount(adj[31 - __builtin_clz(S & -S)] & S);
    }
}
int main() {
    scanf("%d %d", &n, &m);
    rep (i, 0, m - 1) {
        int u, v; scanf("%d %d", &u, &v);
        adj[u - 1] |= 1 << v >> 1, adj[v - 1] |= 1 << u >> 1;
    }
    init();
    LD ans = 0.;
    rep (S, 0, (1 << n) - 2) if (S & 1) {
        rep (i, 0, inc[S]) g[S][i] = bino[inc[S]][i];
        for (int T = (S - 1) & S; T; T = (T - 1) & S) if (T & 1) {
            int cut = inc[S] - inc[T] - inc[S ^ T];
            rep (i, cut, inc[S]) {
                rep (j, 0, std::min(i - cut, inc[T])) {
                    g[S][i] -= g[T][j] * bino[inc[S ^ T]][i - j - cut];
                }
            }
        }
        int incT = inc[((1 << n) - 1) ^ S], cut = m - inc[S] - incT;
        rep (i, 0, inc[S]) {
            LD tmp = 0.;
            rep (j, i + cut, m - inc[S] + i) {
                tmp += bino[incT][j - i - cut] * f[j];
            }
            ans += g[S][i] * tmp;
        }
    }
    printf("%Lf\n", (long double)ans);
    return 0;
}
Solution -「ZJOI 2015」「洛谷 P3343」地震后的幻想乡的更多相关文章
- 洛谷P3343 [ZJOI2015]地震后的幻想乡 [DP,概率期望]
		传送门 思路 题目给了一个提示:对于\(n\)个\([0,1]\)的随机变量,其中第\(k\)小的期望大小是\(\frac{k}{n+1}\). 这引导我们枚举边的相对大小的全排列,然后求最小生成树 ... 
- [bzoj3925] [洛谷P3343] [ZJOI2015] 地震后的幻想乡
		Description 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们. 这不,幻想乡突然发生了地震,所有的道路都崩塌了.现在的首要任 ... 
- 洛谷 P3343 - [ZJOI2015]地震后的幻想乡(朴素状压 DP/状压 DP+微积分)
		题面传送门 鸽子 tzc 竟然来补题解了,奇迹奇迹( 神仙题 %%%%%%%%%%%% 解法 1: 首先一件很明显的事情是这个最小值可以通过类似 Kruskal 求最小生成树的方法求得.我们将所有边按 ... 
- 洛谷3343(ZJOI2015)地震后的幻想乡
		题目:https://www.luogu.org/problemnew/show/P3343 1.那个时间与边的大小排名有关,所以需要求一下最大边的期望排名就行. 2.期望排名是这样算的:(排名为1的 ... 
- 洛谷P4336 [SHOI2016]黑暗前的幻想乡 [Matrix-Tree定理,容斥]
		传送门 思路 首先看到生成树计数,想到Matrix-Tree定理. 然而,这题显然是不能Matrix-Tree定理硬上的,因为还有每个公司只能建一条路的限制.这个限制比较恶心,尝试去除它. 怎么除掉它 ... 
- 「区间DP」「洛谷P1043」数字游戏
		「洛谷P1043」数字游戏 日后再写 代码 /*#!/bin/sh dir=$GEDIT_CURRENT_DOCUMENT_DIR name=$GEDIT_CURRENT_DOCUMENT_NAME ... 
- 「ZJOI2015」地震后的幻想乡 解题报告
		「ZJOI2015」地震后的幻想乡 想了半天,打开洛谷题解一看,最高票是_rqy的,一堆密密麻麻的积分差点把我吓跑. 据说有三种解法,然而我只学会了一种最辣鸡的凡人解法. 题意:给一个无向图\(G\) ... 
- Solution -「JSOI 2019」「洛谷 P5334」节日庆典
		\(\mathscr{Description}\) Link. 给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的). \(|S|\le3\time ... 
- Solution -「洛谷 P4372」Out of Sorts P
		\(\mathcal{Description}\) OurOJ & 洛谷 P4372(几乎一致) 设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ... 
- Solution -「POI 2010」「洛谷 P3511」MOS-Bridges
		\(\mathcal{Description}\) Link.(洛谷上这翻译真的一言难尽呐. 给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ... 
随机推荐
- dotnet core微服务框架Jimu介绍
			jimu是一个基于.Net6.0 简单易用的微服务框架,参考了很多开源库以及想法,使用了大量的开源库(如 DotNetty, consul.net, Flurl.Http, Json.net, Log ... 
- 指针进阶(函数指针)(C语言)
			目录 1. 字符指针变量 2. 数组指针变量 2.1 数组指针变量是什么? 2.2 数组指针变量怎么初始化? 3. 二维数组传参的本质 4. 函数指针变量 4.1 函数指针变量的创建 4.2 函数指针 ... 
- FFmpeg转码音视频时间戳设置分析
			音频时间戳设置 以下代码基于FFmpeg n5.1.2进行分析 以下文档中有关音频的具体时间戳数据来自以下转码命令: ./ffmpeg_g -rw_timeout 5000000 -i 'rtmp:/ ... 
- P4119 Ynoi2018 未来日记
			P4119 Ynoi2018 未来日记 lxl 出的题好 duliu 啊. 感谢来自 fr200110217102 的博客 题解 P4119 [Ynoi2018未来日记]. 下标分块+值域分块+并查集 ... 
- Tensorflow 使用TPU训练
			要用TPU训练tensorflow模型,只能使用静态图.也就是要先通过keras的sequential或者函数式定义模型,而不能直接使用重写的Model类.例子如下,其中包含层的自定义,以及子像素卷积 ... 
- 抓包工具之MitmProxy
			官方文档: https://mitmproxy.org/ github:https://github.com/mitmproxy/mitmproxy 缘起: 之前使用过几个抓包工具, 例如fiddle ... 
- Kafka之入门
			什么是 Kafka Kafka 是一个分布式流式平台,它有三个关键能力 订阅发布记录流,它类似于企业中的消息队列 或 企业消息传递系统 以容错的方式存储记录流 实时记录流 Kafka 的应用 作为消息 ... 
- 基于Docker搭建PHP开发环境
			Docker 是这几年非常火的一项技术,作为一名软件开发人员,应该及时的接触和掌握. 镜像加速: 可以在阿里云上免费的获取,然后进行配置即可使用.阿里云 Docker 加速器,没有阿里云账号注册一个即 ... 
- Blazor 组件库 BootstrapBlazor 中Markdown组件介绍
			组件介绍 Markdown组件是tui.editor的封装,所以所有内容均基于tui.editor. 默认状态下样子如下所示: 其代码如下: <Markdown Language="@ ... 
- Python 学习记录 (4)
			Plotly常见可视化方案:以鸢尾花数据为例 简单介绍: Ploty库也有大量统计可视化方案,并且这些可视化方案具有交互化属性. 主要对鸢尾花数据进行处理与可视化. 所展示的结果为交互界面的截图情况, ... 
