AGC073C 赛后补题记录

news/2025/9/29 15:40:49/文章来源:https://www.cnblogs.com/Sktn0089/p/19118851

感觉还是因为考场上没有用草稿纸,一直在原地思考。在草稿纸上多画画,可以拓展可能的入手点,更直观地刻画。

考虑将整棵树划分为若干个块,其中同一个块内每个点的选择方案都相同,对应的 \(x\) 也相同,并且每个块是极大的。

每个块可能会选择包掉其他的块,手模一下发现如果包的时候不把对应的整个块包掉是不优的。

进一步的,如果包掉了一个块,同时会把这个块包的块也包掉。

也就是说,这具有传递性,这种关系形成了一个森林。对于一个块,其会包掉 \(x\) 比它大的块,不会包 \(x\) 比它小的块。

按照 \(x\) 从大到小加入所有块,加入一个块的时候会包掉其相邻的以加入的块的包。

所以,如果能确定每个块的 \(x\),就能唯一确定所有的包的方案。

这也同时证明了,块的划分是极大的。因为如果一个 \(x\) 较大的块和一个 \(x\) 较小的块合并,由于 \(x\) 较小的块包掉了 \(x\) 较大的块,从其包中去掉 \(x\) 较大的块后 \(x\) 变为 负数,这样 \(x\) 较大的块就不优了。

再看每一个块,因为已经确定了这个块的包,将块外的贡献挂在块内对应的连接的点上。

该块内部形成了一棵树,考虑块内每个点 \(u\) 的子树权值总和 \(s_u\),令 \(r\) 为该块的根,\(S\) 为块内点集,那么应满足 \(\forall u\in S, \ 0\le s_u\le s_r\)

注意 \(s_u\) 是由 \(\sum_{v\in son(u)} s_v\),以及挂在 \(u\) 上的权值贡献,以及 \(u\) 本身的权值三部分构成。由于 \(u\) 的权值可以取 \([-n + 1, 1]\),发现 \(s_u \in [0, 1]\) 都是可以取到的,所以可以看成每个 \(s_u\) 都是一个随机变量,可以取到 \([0, 1]\) 的所有值。

实际求答案时其实不需要考虑块之间的 \(x\) 的大小顺序,需要考虑的条件只有 \(0\le s_u\le s_r\)。上面只是有助于我们分析。

综上所述,我们需要对于每一种块的划分方案,求所有块的贡献乘积的总和。

现在考虑求一个块的贡献:对于一个大小为 \(k\) 的块,枚举 \(s_r = x\),那么贡献为 \(\displaystyle \int_{x = 0} ^ 1 x ^ k \left (\displaystyle \int_{y = 0} ^ x 1 \ dy \right ) ^ {k - 1} dx = \displaystyle \int_{x = 0} ^ 1 x ^ {2k - 1} dx = \dfrac 1 {2k}\)

树上背包统计答案,时间复杂度为 \(\mathcal O(n ^ 2)\)


点击查看代码
#include <bits/stdc++.h>
#define ll int
#define LL long long
#define uLL unsigned LL
#define fi first
#define se second
#define mkp make_pair
#define pir pair <ll, ll>
#define pb emplace_back
#define i128 __int128
const ll maxn = 5010, mod = 998244353, M = 1e5, inf = 1e9;
template <class T>
void rd(T &x) {char ch; ll f = 0;while(!isdigit(ch = getchar()))if(ch == '-') f = 1;x = ch - '0';while(isdigit(ch = getchar()))x = (x << 1) + (x << 3) + ch - '0';if(f) x = -x;
}
ll power(ll a, ll b = mod - 2, ll p = mod) {ll s = 1;while(b) {if(b & 1) s = 1ll * s * a % p;a = 1ll * a * a % p, b >>= 1;} return s;
}
template <class T1, class T2>
void add(T1 &x, const T2 y) { x = x + y >= mod? x + y - mod : x + y; }
template <class T1, class T2>
void sub(T1 &x, const T2 y) { x = x < y? x + mod - y : x - y; }
template <class T1, class T2>
ll pls(const T1 x, const T2 y) { return x + y >= mod? x + y - mod : x + y; }
template <class T1, class T2>
ll mus(const T1 x, const T2 y) { return x < y? x + mod - y : x - y; }
template <class T1, class T2>
void chkmax(T1 &x, const T2 y) { x = x < y? y : x; }
template <class T1, class T2>
void chkmin(T1 &x, const T2 y) { x = x < y? x : y; }
using namespace std;ll n, f[maxn][maxn], siz[maxn], inv[maxn];
vector <ll> to[maxn];void dfs(ll u, ll fa = 0) {siz[u] = 1, f[u][1] = 1;for(ll v: to[u]) {if(v == fa) continue;dfs(v, u);for(ll i = siz[u]; i; i--) {ll val = f[u][i]; f[u][i] = 0;for(ll j = 0; j <= siz[v]; j++)add(f[u][i + j], 1ll * val * f[v][j] %mod);}siz[u] += siz[v];}for(ll i = 1; i <= siz[u]; i++)add(f[u][0], 1ll * f[u][i] * inv[i] %mod);
}int main() {rd(n); inv[1] = 1;for(ll i = 2; i <= n; i++)inv[i] = (mod - mod / i) * 1ll * inv[mod % i] %mod;for(ll i = 1; i <= n; i++) inv[i] = 1ll * inv[i] * (mod / 2 + 1) %mod;for(ll i = 1; i < n; i++) {ll u, v; rd(u), rd(v);to[u].pb(v), to[v].pb(u);}dfs(1);printf("%lld\n", 1ll * f[1][0] * power(n, mod - 1 - n) %mod);return 0;
}

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

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

相关文章

LuatOS赋能Air780EPM:FTP通信开发教程正式上线!

随着物联网应用深入,远程文件传输需求日益增长。本教程聚焦LuatOS在Air780EPM平台上的FTP功能实现,提供详尽的代码示例与调试指导。 一、什么是 FTP 1.1 基本概念 FTP 协议 在 4G 物联网场景中,FTP 协议(File Tran…

深入解析:【深度学习计算机视觉】03:目标检测和边界框

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

DM40万用表为何全网爆火?!它有哪些与众不同?DM40万用表比肩千元级表,让您轻松实现专业级测量自由!

电子测量的“矛盾”与 DM40 的破局之道 在电子工程师的世界里,“矛盾” 始终存在:新手被传统万用表的多旋钮、多插孔搞得晕头转向,甚至因插错档位烧毁设备;资深工程师则要背着万用表、示波器、信号发生器 “三件套…

树形dp [POI 2013] LUK-Triumphal arch

波兰人神秘题目。 题意 \(n\) 点的树,初始节点 1 为黑色,其余白色。 两个人在博弈。 B 一开始位于 1 点,进行如下的回合。 首先每轮 A 选择 K 个点,然后 B 选择一个相邻的节点进行移动。 若任意时刻 B 位于白色的节…

【论术】t-design tree组件判断点击了角标还是label

用以精确校准是否点击了节点本身还是仅仅展开// 树的点击事件 const handleTreeClick = (params) => {const event = params.e;const labelElement = event.target.closest(".t-tree__label");// 判断是角…

Redis基础篇——集成客户端 - 实践

Redis基础篇——集成客户端 - 实践2025-09-29 15:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…

leetCode刷题记录1

近来在反思自己的技能树,为找工作做准备。从大一的C语言、C++,到大二的Java、Python,甚至还没学的大三C#——编程语言学了一堆,但每一门都只够应付考试,没一个能算熟练掌握。技术框架也接触了不少,SpringBoot、V…

【Bluedroid】A2DP Source 音频流暂停流程解析[5]:停止流程及资源管理机制(btif_a2dp_source_stop_audio_req) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

冷饮网站开发背景意义网页界面布局

https://www.processon.com/view/link/60b9cd711efad420f6d868a8

完整教程:分布式之抢购

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

k8s下部署kuboard

环境: OS:Centos 71.下载yaml文件[root@master kuboard]# cd /root/my_yaml/kuboard[root@master kuboard]# wget https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml2.部署[root@master kuboard]# cd /root/my_…

湘潭市哪里做网站大型网站开发价格

原文链接&#xff1a;http://blog.csdn.net/dev_csdn/article/details/78424803 ------------------------------------------------------------------- Docker是开发人员和系统管理员构建&#xff0c;发布和运行分布式应用程序的开放平台&#xff0c;可以在笔记本电脑、数据…

万象EXCEL开发(三)格式解读calcChain.xml——东方仙盟练气期 - 指南

万象EXCEL开发(三)格式解读calcChain.xml——东方仙盟练气期 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…

网站建设与实现毕业答辩ppt免费素材图片下载

哈喽大家好&#xff0c;我是咸鱼 在文章《三剑客之 sed》中咸鱼向大家介绍了文本三剑客中的 sed sed 全名叫 stream editor&#xff0c;流编辑器&#xff0c;用程序的方式来编辑文本 那么今天咸鱼打算讲一下我在用 sed 原地替换文件时遇到的趣事 sed 让文件属性变了&#xff…

双创网站建设百度做的网站字体侵权吗

什么是类加载器&#xff1f; 类加载器&#xff1a;JVM只会运行二进制文件&#xff0c;类加载器的作用就是将字节码文件加载到JVM中&#xff0c;从而Java 程序能够启动起来。 类加载器有哪些&#xff1f; 启动类加载器(BootStrap ClassLoader):加载JAVA HOME/jre/lib目录下的库…

echarts4升级为echarts5的常见问题

series下 label 下是没有 textStyle 属性 [ECharts] DEPRECATED: textStyle hierarchy in label has been removed since 4.0. All textStyle properties are configured in label directly now. [ECharts]已弃用:标签…

全球网站域名后缀商城公众号开发

今天遇到一个比较奇怪的问题&#xff0c;PA30能查到员工主数据&#xff0c;任何信息类型也没有错误&#xff0c;但是核算工资的时候发现无法找到此人。 但是核算工资无法核算 断点到逻辑数据get pernr&#xff0c;也不会进入断点 查看0000数据有间隔 具体错误的代码位置如下&am…

OpenCV2-图像基本操作-阈值与平滑处理-形态学-梯度运算 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

百科网站开发wordpress用户注册后台

回数是指从左到右读和从右到左读都是一样的数&#xff0c;请利用filter()滤掉非回数(打印出1000内所有回数) def is_palindrome(n): return str(n)str(n)[::-1] # str(n)[::-1]代表字符串从后往前读&#xff0c;也代表字符串的翻转 output filter(is_palindrome,range(1,10…

怎样做个人网站宜昌哪里有做网站的

这是我关于使用Spring Boot和Project Reactor有效处理SQS消息的博客文章的后续文章 我在第一部分中列出了一些方法上的差距。 1.处理SQS客户端调用中的失败 2.该方法一次只能处理来自SQS的一条消息&#xff0c;如何并行化 3.它不处理错误&#xff0c;管道中的任何错误都会中…