对于每种情况分别统计概率来计算期望+树上连通块统计:ARC165E

news2024/11/15 11:49:21

https://atcoder.jp/contests/arc165/tasks/arc165_e

考虑一个常见套路,我们对每个连通块统计其概率,设为 p ( T ) p(T) p(T),则答案为

∑ ∣ T ∣ > k p ( T ) \sum_{|T|>k} p(T) T>kp(T)

可以想成对于每个大小大于 k k k 的连通块,都要至少选一个点,也就是进行一次操作。所以我们就统计所以这么大的连通块存在的概率,乘上1,就是其期望。总期望就是单独的期望之和。

然后一些显然的性质,一个连通块必然是树上的一个子树弄走它的一堆子树。而且要形成这样一个连通块,连通块内的点一定没有被选,而且和连通块相邻的所有点一定全部被选过。

那么我们现在就发现决定一个连通块贡献的性质。有了这个性质,我们就可以合并等价类了。

在合并之前,我们先考虑 n n n 个点的块, m m m 个点相连的概率。这 m m m 个点必然早于这 n n n 个点先被选。

但我们发现操作的先后可能影响一个点是否被选。

有一种常见套路,就是我们直接枚举操作顺序,这个操作顺序代表中如果某个点所在连通块大小小于等于 k k k,我们可以视为跳过这个操作。所以对于任意 n n n 个点的操作方案为 n ! n! n!

所以 n n n 个点的块, m m m 个点相连的概率为 n ! m ! ( n + m ) ! \frac{n!m!}{(n+m)!} (n+m)!n!m!

这一步也可以操作官方题解的转化来理解:

在这里插入图片描述

然后回到前面那个问题,如何计算合法 ( n , m ) (n,m) (n,m) 对呢?

因为这是一棵树,直接树形dp就行。数据范围就100,暴力转移即可。

复杂度 O ( n 4 ) O(n^4) O(n4)

#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){int x=0,f=1;char ch=getchar(); while(ch<'0'||
ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
//mt19937 rand(time(0));
//mt19937_64 rand(time(0));
//srand(time(0));
#define N 210
//#define M
#define mo 998244353
int pw(int a, int b) {
	int ans=1; 
	while(b) {
		if(b&1) ans*=a; 
		b>>=1; a*=a; 
		ans%=mo; a%=mo; 
	}
	return ans; 
}
int n, m, i, j, k, T;
int dp[N][N][N], f[N][N], w[N]; 
int u, v, x, fac[N], inv[N], ans; 
vector<int>G[N]; 

void Mod(int &a) {
	a=(a%mo+mo)%mo; 
}

void dfs(int x, int fa) {
	dp[x][1][0]=w[x]=1; 
	int a, b, c, d; 
	for(int y : G[x]) {
		if(y==fa) continue; 
		dfs(y, x); 
		for(a=0; a<=w[x]+w[y]; ++a)
			for(b=0; b<=w[x]+w[y]; ++b) 
				f[a][b]=dp[x][a][b], dp[x][a][b]=0; 
		for(a=0; a<=w[x]; ++a)
			for(b=0; b<=w[x]; ++b)  {
				dp[x][a][b+1]+=f[a][b]; Mod(dp[x][a][b+1]); 
				for(c=0; c<=w[y]; ++c)
					for(d=0; d<=w[y]; ++d) {
						dp[x][a+c][b+d]+=f[a][b]*dp[y][c][d]%mo; 
						Mod(dp[x][a+c][b+d]); 
					}
			}
		w[x]+=w[y]; 
	}
}

signed main()
{
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
//	T=read();
//	while(T--) {
//
//	}
	n=read(); m=read(); 
	for(i=fac[0]=1; i<=2*n+5; ++i) fac[i]=fac[i-1]*i%mo; 
	inv[2*n+5]=pw(fac[2*n+5], mo-2); 
	for(i=2*n+4; i>=0; --i) inv[i]=inv[i+1]*(i+1)%mo; 
	for(i=1; i<n; ++i) {
		u=read(); v=read(); 
		G[u].pb(v); G[v].pb(u); 
	}
	dfs(1, 0); 
	for(x=1; x<=n; ++x) 
		for(i=m+1; i<=n; ++i)
			for(j=0; j<=n; ++j) {
				u=i; v=j+(x!=1); 
				if(dp[x][i][j])
				ans+=fac[u]*fac[v]%mo*inv[u+v]%mo*dp[x][i][j]%mo; 
				Mod(ans); 
			}
	printf("%lld", ans); 
	return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1019398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RockyLinux安装MariaDB

文章目录 1 前言2 参考3 开始安装3.1 运行官方脚本 添加 MariaDB 的源3.2 安装 MariaDB Server3.3 启动 MariaDB 4 SSH 登录 MariaDB4.1 ssh 上使用 root 账号登录4.2 新建管理员账号并授权 5 放行端口 33065.1 VirtualBox 上设置端口转发5.2 Rocky Linux 防火墙放行 3306 端口…

nacos服务端--切换数据源

nacos服务端版本&#xff1a;2.3.0-SNAPSHOT 在nacos的服务端&#xff0c;需改application.properties文件 #*************** Config Module Related Configurations ***************# ### Deprecated configuration property, it is recommended to use spring.sql.init.platf…

BK698CPA15B0 创建了通用电气数字工业发展指数

BK698CPA15B0 创建了通用电气数字工业发展指数 基于调查研究&#xff0c;通用电气创建了通用电气数字工业发展指数&#xff0c;以跟踪数字化转型的实际进展——从对IIoT的展望到准备好转型。该创始指数在100分制中的总得分为63&#xff0c;表明尽管工业互联网的前景非常强劲&a…

3.2-3.4 Qt样式表使用补充说明

本期内容 3.2 设置样式的几种方式—— 3.2.1 不同方式使用介绍—— 3.2.2 不同方式的优缺点3.3 样式表使用过程中产生的冲突-分析及解决3.4 各控件中常用样式讲解及说明3.2 设置样式的几种方式 我们通常在使用Qt开发的过程中都会使用样式表来美化我们的界面,关于如何使用样式…

input修改checkbox复选框默认选中样式

问题描述&#xff1a; <input type"checkbox" /> input修改checkbox默认选中样式&#xff0c;直接设置选中后的样式不生效&#xff0c;需要先给复选框设置-webkit-appearance: none&#xff08;取消默认样式&#xff09;&#xff0c; 再设置样式才会生效。 …

Vue中的路由懒加载:提高性能和用户体验

Vue中的路由懒加载&#xff1a;提高性能和用户体验 在现代Web应用程序中&#xff0c;性能和用户体验是至关重要的。为了加速页面加载速度和提高用户感知的响应性&#xff0c;Vue提供了一种路由懒加载的方法。本文将详细介绍Vue中如何进行路由懒加载&#xff0c;并提供代码示例…

充分利用学习平台,提升个人职业竞争力

在当今竞争激烈的职场环境中&#xff0c;个人职业竞争力的提升变得至关重要。而充分利用学习平台成为了我们提升竞争力的一种有效途径。学习平台不仅可以提供丰富多样的学习资源&#xff0c;还能提升个人技能和知识水平&#xff0c;让我们更具竞争力。 学习平台提供了丰富的学…

图扑邀您共聚 IOTE 国际物联网展·深圳站 | 展会预告

参展时间&#xff1a;9 月 20 日- 22 日 图扑展位&#xff1a;9 号馆 9B 35-1 参展地址&#xff1a;深圳国际会展中心&#xff08;宝安新馆&#xff09; IOTE 2023 第二十届国际物联网展深圳站&#xff0c;将于 9 月 20 日- 22 日在深圳国际会展中心&#xff08;宝安&#xff0…

Python 之利用matplotlib.pyplot 生成图形和图表

文章目录 介绍运用 介绍 matplotlib.pyplot是Matplotlib库的一个子模块&#xff0c;它提供了一个简单的界面来创建各种类型的图形和图表。使用pyplot&#xff0c;您可以轻松创建、定制和显示图形&#xff0c;而无需编写大量的底层代码。以下是matplotlib.pyplot的一些常见用法…

Vue Router最佳实践,以确保你的Vue.js应用的路由管理清晰、可维护和高效

文章目录 路由结构设计命名路由动态路由参数导航守卫命名视图 (Named Views)懒加载路由错误处理 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社区…

【面试经典150 | 双指针】判断子序列

文章目录 写在前面Tag题目来源题目解题解题思路方法一&#xff1a;双指针方法二&#xff1a;动态规划 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对…

如何在Gazebo中实现多机器人编队仿真

文章目录 前言一、仿真前的配置二、实现步骤1.检查PC和台式机是否通讯成功2.编队中对单个机器人进行独立的控制3、对机器人进行编队控制 前言 实现在gazebo仿真环境中添加多个机器人后&#xff0c;接下来进行编队控制&#xff0c;对具体的实现过程进行记录。 一、仿真前的配置…

keithley2400数字源表(吉时利)2400

181/2461/8938描述 2400型源表是一个20W的仪器&#xff0c;可以提供和测量从1 V到200V DC的电压和从10pA到1A的电流。它非常适合测试各种器件&#xff0c;包括二极管、电阻、电阻网络、有源电路保护器件以及便携式电池供电器件和元件。它对于系统电源和IDDQ测试应用也很有用 …

一、K近邻算法K-NN(有监督学习)

一、算法思路 K近邻算法&#xff0c;k-nearest neighbor&#xff0c;即K-NN 通俗来说&#xff1a;给定一个元素&#xff0c;然后以该元素坐标为圆心开始画圆&#xff0c;其中K值是超参数需要人为给定&#xff0c;圆的半径逐渐增大(距离度量采用欧氏距离)&#xff0c;直到包含其…

哪些企业需要数字化转型?

数字化转型是一个广泛且持续的过程&#xff0c;可以使各行业的公司受益。虽然数字化转型的具体需求和目标可能因企业而异&#xff0c;但这通常是保持竞争力和相关性的必要条件。以下是一些可能需要数字化转型的公司和行业的一些示例&#xff1a; 1.传统零售商&#xff1a;零售…

炫云云渲染3ds max效果图渲染教程

很多人在第一次使用炫云云渲染渲染效果图的时候不知道怎么使用&#xff0c;其实现在使用炫云渲染效果图真的很简单&#xff0c;我们一起来看看。 一客户端安装 1、打开炫云云渲染官网&#xff0c;点击右上角的客户端下载&#xff0c;选择炫云客户端&#xff08;NEXT版&#xf…

[linux]服务器挂代理提升下载权重速度

写在前面 这里主要以huggingface下载权重为例&#xff0c;介绍如何在linux中部署代理提升下载速度 实际操作 第一步&#xff1a;服务器安装clash文件 https://github.com/Dreamacro/clash/releases#下载clash链接第二步&#xff1a;使用自己的配置文件 将config.yaml替换掉…

DSOX3012A是德科技keysight DSOX3012A示波器

181/2461/8938是德科技DSOX3012A(安捷伦)示波器 是德科技DSOX3012A(安捷伦)是InfiniiVision 3000 X系列中的双通道型号。这款可升级示波器采用突破性技术设计&#xff0c;提供卓越的性能和功能。其独特的5仪器合一设计为相同的预算提供了更大的范围。 是德科技DSOX3012A示波器…

Vue系列(一)之 Vue入门

一. Vue简介 1.1 概述 Vue是一个构建用户界面(UI)的[渐进式]JavaScript框架。 2.2 特点 1.声明式编码&#xff0c;遵循MVVM原则 2.编码简单&#xff0c;体积小 3.组件化&#xff0c;复用率高&#xff0c;代码维护容易 2.3 MVVM介绍 MVVM&#xff0c;一种更好的UI模式解决…

Linux 或者 Docker 容器通过 date 设置系统时间

目录 1. Linux2. Docker 容器2.1 进入容器内部修改2.2 可能会遇到的问题 1. Linux 要在Linux系统中设置日期和时间&#xff0c;可以使用date命令。 使用以下命令格式来设置日期和时间&#xff1a; sudo date -s "YYYY-MM-DD HH:MM:SS"其中&#xff0c;YYYY表示年份…