Codeforces 1856E2 复杂度分析 + DP
题意
传送门 Codeforces 1856E2 PermuTree (hard version)
题解
可以独立考虑每一个固定的 p = l c a ( u , v ) p=lca(u,v) p=lca(u,v) 对答案的贡献。可以观察到,对于 p p p 的每一棵子树,其所有节点在最优情况下仅有 a p < a v a_p < a_v ap<av 或 a p > a v a_p > a_v ap>av 两种可能。那么需要在值域上将子树的节点左右划分,那么需要求解所有子树的子集中,子树规模 s z v sz_v szv 的和最接近所有子树和的 1 / 2 1/2 1/2 的值 x x x,则对答案的贡献为 x ∗ ( s z p − 1 − x ) x * (sz_p - 1 - x) x∗(szp−1−x)。对于上述背包问题,满足 s z u + ⋯ + s z v = s z p − 1 sz_u + \cdots + sz_v = sz_p - 1 szu+⋯+szv=szp−1,可以做到 O ( s z p s z p ) O(sz_p\sqrt{sz_p}) O(szpszp),具体做法类似于二进制拆分,不断将相同的值合并,最终每一个不同的值仅有常数个,则不同的值数量为 O ( s z p ) O(\sqrt{sz_p}) O(szp)。
若存在 s z v ∗ 2 ≥ s z p − 1 sz_v * 2 \geq sz_p - 1 szv∗2≥szp−1,则无需进行背包。考虑最坏情况,即平衡的多叉树,容易观察到所有背包 DP 的复杂度为 O ( n n ) O(n\sqrt{n}) O(nn), std::bitset 优化即可。
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int N = 1E6;template <int m = 1>
ll knapsack(int n, vector<int> &b) {if (m < n) {return knapsack<min(m * 2, N)>(n, b);}bitset<m + 1> bt;bt[0] = 1;for (int x : b) {bt |= bt << x;}int res = -1;for (int i = 0; i <= m; ++i) {if (bt[i] > 0) {if (res == -1 || abs(2 * res - n) > abs(2 * i - n)) {res = i;}}}return res;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n;cin >> n;vector<vector<int>> g(n);for (int i = 1; i < n; ++i) {int p;cin >> p;g[p - 1].push_back(i);}auto get = [&](vector<int> &a) -> ll {if ((int)a.size() < 2) {return 0;}int sum = 0, mx = 0;for (int x : a) {sum += x;mx = max(mx, x);}if (mx * 2 >= sum) {return (ll)mx * (sum - mx);}vector<int> b;vector<int> freq(sum + 1);for (int x : a) {freq[x] += 1;}for (int i = 1; i <= sum; ++i) {if (freq[i] > 0) {int d = (freq[i] - 1) / 2;freq[2 * i] += d;freq[i] -= d * 2;for (int j = 0; j < freq[i]; ++j) {b.push_back(i);}}}int x = knapsack(sum, b);return (ll)x * (sum - x);};vector<int> sz(n);ll res = 0;function<void(int)> dfs = [&](int v) {sz[v] = 1;vector<int> a;for (int u : g[v]) {dfs(u);a.push_back(sz[u]);sz[v] += sz[u];}res += get(a);};dfs(0);cout << res << '\n';return 0;
}
相关文章:
Codeforces 1856E2 复杂度分析 + DP
题意 传送门 Codeforces 1856E2 PermuTree (hard version) 题解 可以独立考虑每一个固定的 p l c a ( u , v ) plca(u,v) plca(u,v) 对答案的贡献。可以观察到,对于 p p p 的每一棵子树,其所有节点在最优情况下仅有 a p < a v a_p < a_v ap…...
Windows - UWP - 为UWP应用创建桌面快捷方式
Windows - UWP - 为UWP应用创建桌面快捷方式 前言 这是一个较为简单的方式,不需要过多的命令行。 How 首先Win R -> shell:AppsFolder -> 回车, 这将显示电脑上的已安装应用(Win32 & UWP): 找到想要创建…...
了解Web DDoS海啸攻击的4个维度
我们都知道近年来网络攻击的数量和频率急剧上升,针对Web应用程序的DDoS海啸攻击就是其中增长非常迅速的一个种类。过去常见的HTTP/S洪水攻击正在大范围的转变为更难对付的Web DDoS海啸攻击,每个人都应该提前做好被攻击的准备并采取适当的保护措施。 哪些…...
【数学建模】逻辑回归算法(Logistic Resgression)
逻辑回归算法 简介逻辑回归与条件概率绘制sigmoid函数 简介 逻辑回归算法是一种简单但功能强大的二元线性分类算法。需要注意的是,尽管"逻辑回归"名字带有“回归”二字,但逻辑回归是一个分类算法,而不是回归算法。 我认为ÿ…...
Hadoop HA集群两个NameNode都是standby或者主NameNode是standby,从NameNode是active的情况集锦
文章目录 背景架构HDFS HA配置错误原因解决方案方案一方案二方案三(首先查看自己各参数文件是否配置出错) 后记补充failovertransitionToActive 常用端口号及配置文件常用端口号hadoop3.xhadoop2.x 常用配置文件 这里说一下配置Hadoop HA集群可能出现的两…...
[Go版]算法通关村第十一关白银——位运算的高频算法题
目录 专题1:位移的妙用题目:位1的个数(也被称为汉明重量)解法1:遍历所有位,判断每个位的数字是否是1Go代码 解法2:依次消除每个1的位 numnum&(num-1)Go代码 题目:比特位计数思路…...
Swift 基础
工程目录 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 点击下载代码:swift-01...
IDEA的常用设置,让你更快速的编程
一、前言 在使用JetBrains的IntelliJ IDEA进行软件开发时,了解和正确配置一些常用设置是非常重要的。IDEA的强大功能和定制性使得开发过程更加高效和舒适。 在本文中,我们将介绍一些常用的IDEA设置,帮助您更好地利用IDEA进行开发。这些设置包…...
docker 镜像的导出与导入 save 与 load
一、镜像导出 docker save 导出 将系统中的镜像保存为压缩包,进行文件传输。使用 docker save --help 查看命令各参数,或者去docker官网查看.以 hello-world镜像为例。 A:将镜像保存为tar包 docker save image > package.tar docker sa…...
WPF显示初始界面--SplashScreen
WPF显示初始界面–SplashScreen 前言 WPF应用程序的运行速度快,但并不能在瞬间启动。当第一次启动应用程序时,会有一些延迟,因为公共语言运行时(CLR)首先需要初始化.NET环境,然后启动应用程序。 对于WPF中…...
08- AD/DA模/数转换
AD/DA模/数转换 8、AD/DA模/数转换8.1 AD转换注意 示例8.2 DA转换DAC转换原理: 8.3 PWM的DAC 8、AD/DA模/数转换 8.1 AD转换 通道引脚对照表: ADC的引脚: 规则通道和注入通道: 各个通道可以在单次、连续、扫描或者间断模式里…...
DTC服务(0x14 0x19 0x85)
DTC相关的服务有ReadDTCInformation (19) service,ControlDTCSetting (85) service和ReadDTCInformation (19) service ReadDTCInformation (19) service 该服务允许客户端从车辆内任意一台服务器或一组服务器中读取驻留在服务器中的诊断故障代码( DTC )信息的状态…...
【国护攻防场景下的沙箱技术对比】
目录 前言 沙箱技术分析 总结 前言 真高兴呀,又是受到红队大佬青睐的一天,今天下午很荣幸的收到了来自红队大佬的恶意投喂,把我们各位在座100年工作经验的蓝队师傅们吓得赶忙拔掉自己的电脑电源,断掉自己的网线,…...
springboot综合案例第三课
SpringSecurity入门 什么是SpringSecurity Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架。 (https://projects.spring.io/spring-security/) Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别 是使…...
面试经典150题——罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#x…...
第三篇|金融人数据来源有哪些
数据对于金融行业真的很重要,那么金融人有哪些途径查数据呢? 国内: 1. 国家统计局 这个应该是无论什么行业都使用最频繁的网站,每个月都会固定发上个月资产投资数据 、工业增加值和利润数据等常规数据,其他数据也会…...
爬虫逆向实战(二)--某某观察城市排行榜
一、数据接口分析 主页地址:某某观察 1、抓包 通过抓包可以发现数据接口是multi 2、判断是否有加密参数 请求参数是否加密? 无请求头是否加密? 无cookie是否加密? 无响应数据是否加密? 通过查看“响应”板块可以…...
Grafana Prometheus 通过JMX监控kafka 【2023最新方式】
第三方kafka exporter方案 目前网上关于使用Prometheus 监控kafka的大部分资料都是使用一个第三方的 kafka exporter,他的原理大概就是启动一个kafka客户端,获取kafka服务器的信息,然后提供一些metric接口供Prometheus使用,随意它…...
发布游戏,进行打包。(Unity)
做到这里,我们的项目基本功能已经完成了,如果你还想使项目功能更加完善,可以自己思考如何补充,充分发挥并进行优化使效果达到更加美好。 首先呢,我们这里是说打包Window电脑游戏,我们直接点击菜单栏文件-&…...
我的C++待办事项
2023年8月17日 内存管理部分 学习智能指针 写一篇关于怎么在Linux中安装和使用vclgrind的博客(2023年8月17日下午完成) 拍一个关于在Linux中安装和使用vclgrind的视频 在Windows上怎么检测内存泄漏 怎么使用Address Sanitizer 在Linux上如何使用gc…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
