【CF】Day66——Edu 168.D + CF 853 (Div. 2).C (树 + 二分 + 贪心 | 组合数学)

D. Maximize the Root

题目:

 

思路:

树上二分,中下题

我们可以发现如果 x 可以,那么 x - 1 肯定也可以,所以可以直接二分答案

具体的,我们每次二分能增加的值 mid ,如果 a[i] < mid,那么子树就要 a[i] + a[i] - mid 个,否则直接递归子树即可,以此类推,具体实现看代码

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int n;cin >> n;vector<int> a(n + 1);vector<vector<int>> g(n + 1);for (int i = 1; i <= n; i++){cin >> a[i];}for (int i = 2; i <= n; i++){int p; cin >> p;g[p].push_back(i);}if (n == 1){cout << a[1] << endl;return;}auto check = [&](int need) ->bool{int flag = 1;auto dfs = [&](auto self,int fa,int needval) ->void{if (!flag){return;}if (fa != 1)needval += max(needval - a[fa], 0LL);if (needval > a[fa] && g[fa].empty() || needval > 1e9){flag = 0;return;}for (auto& son : g[fa]){self(self, son, needval);}};dfs(dfs, 1, need);return flag;};int l = 0, r = 1e9;while (l + 1 < r){int mid = l + r >> 1;if (check(mid)){l = mid;}else{r = mid;}}if (check(r)){cout << a[1] + r << endl;return;}cout << a[1] + l << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}


C. Serval and Toxel's Arrays

题目:

思路:

很考验实现方式的一题

遇到这种题,我们要知道拆分,即把每个数的奉献算出来再累加即可

对于一个数 x,如果 我们选了一个 没有 x 的数组,那么奉献就是 1,取有 x 的数列,奉献也是 1,但是这是两种不同的取法,所以我们可以分开计算(特别的一共有 m + 1个数组,因为还有初始数组)

对于第一种取法,那么就是 cnt += xhas * (m + 1 - xhas),其中 xhas 为 x 的数量

对于第二种取法,有 cnt += xhas * (xhas-1) / 2

由于 n + m 不是很大,所以枚举 n+m 的每一个数是可行的,那么如何快速计算 xhas 成了问题

我们可以这样想,由于每次只改变一个数,那么也就是说如果某个数一直没改变,那么最后肯定有 m + 1 个,而如果中间改变过,那么肯定在改变之前这个数就一直存在了,也就是连续的某一段全含有 x,所以我们可以存储 last[i] 代表上一个数是否存在,以及如果存在它的位置在哪里

这样我们就解决了 xhas 的问题,具体实现看代码

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"void solve()
{int n, m;cin >> n >> m;vector<int> a(n+1),last(n+m+1,-1),cnt(n+m+1,0);for (int i = 1; i <= n; i++){cin >> a[i];last[a[i]] = 0;}for (int i = 1; i <= m; i++){int p, v;cin >> p >> v;if (a[p] != v){cnt[a[p]] += i - last[a[p]];last[a[p]] = -1;last[v] = i;a[p] = v;}}int res = 0;for (int i = 1;i <= n+m;i++){if (last[i] != -1){cnt[i] += m - last[i] + 1;}}for (int i = 1; i <= n + m; i++){res += cnt[i] * (m + 1 - cnt[i]);res += cnt[i] * (cnt[i] - 1) / 2;}cout << res << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

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

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

相关文章

生成对抗网络(GANs)中的损失函数公式 判别器最优解D^*(x)的推导

https://www.bilibili.com/video/BV1YyHSekEE2 这张图片展示的是生成对抗网络&#xff08;GANs&#xff09;中的损失函数公式&#xff0c;特别是针对判别器&#xff08;Discriminator&#xff09;和生成器&#xff08;Generator&#xff09;的优化目标。让我们用Markdown格式逐…

分布式爬虫架构设计

随着互联网数据的爆炸式增长&#xff0c;单机爬虫已经难以满足大规模数据采集的需求。分布式爬虫应运而生&#xff0c;它通过多节点协作&#xff0c;实现了数据采集的高效性和容错性。本文将深入探讨分布式爬虫的架构设计&#xff0c;包括常见的架构模式、关键技术组件、完整项…

[java]eclipse中windowbuilder插件在线安装

目录 一、打开eclipse 二、打开插件市场 三、输入windowbuilder&#xff0c;点击install 四、进入安装界面 五、勾选我同意... 重启即可 一、打开eclipse 二、打开插件市场 三、输入windowbuilder&#xff0c;点击install 四、进入安装界面 五、勾选我同意... 重启即可

sass,less是什么?为什么要使用他们?

理解 他们都是css的预处理器,允许开发者通过更高级的语法编写css代码(支持变量,嵌套),然后通过编译成css文件 使用原因 结构清晰,便于扩展提高开发效率,便于后期开发维护

Java设计模式之模板方法模式:从基础到高级的全面解析(最详解)

文章目录 一、模板方法模式基础概念1.1 什么是模板方法模式1.2 模板方法模式的核心结构1.3 模板方法模式中的方法分类1.4 模板方法模式的简单示例二、模板方法模式的深入解析2.1 模板方法模式的核心原理2.2 模板方法模式的优势与适用场景优势分析适用场景2.3 模板方法模式与其他…

【C/C++】如何在一个事件驱动的生产者-消费者模型中使用观察者进行通知与解耦

文章目录 如何在一个事件驱动的生产者-消费者模型中使用观察者进行通知与解耦?1 假设场景设计2 Codes3 流程图4 优劣势5 风险可能 如何在一个事件驱动的生产者-消费者模型中使用观察者进行通知与解耦? 1 假设场景设计 Producer&#xff08;生产者&#xff09;&#xff1a;生…

MVC和MVVM架构的区别

MVC和MVVM都是前端开发中常用的设计模式&#xff0c;都是为了解决前端开发中的复杂性而设计的&#xff0c;而MVVM模式则是一种基于MVC模式的新模式。 MVC(Model-View-Controller)的三个核心部分&#xff1a;模型、视图、控制器相较于MVVM(Model-View-ViewModel)的三个核心部分…

兰亭妙微 | 图标设计公司 | UI设计案例复盘

在「33」「312」新高考模式下&#xff0c;选科决策成为高中生和家长的「头等大事」。兰亭妙微公司受委托优化高考选科决策平台个人诊断报告界面&#xff0c;核心挑战是&#xff1a;如何将复杂的测评数据&#xff08;如学习能力倾向、学科报考机会、职业兴趣等&#xff09;转化为…

有铜半孔的设计规范与材料创新

设计关键参数 孔径与间距限制 最小孔径需≥0.6mm&#xff0c;孔边距≥0.5mm&#xff0c;避免铜层脱落&#xff1b;拼版时半孔区域需预留2mm间距防止撕裂。 阻焊桥设计 必须保留阻焊桥&#xff08;宽度≥0.1mm&#xff09;&#xff0c;防止焊锡流入孔内造成短路。 猎板的材料…

Engineering a direct k-way Hypergraph Partitioning Algorithm【2017 ALENEX】

文章目录 一、作者二、摘要三、相关工作四、算法概述五、实验结果六、主要贡献 一、作者 Yaroslav Akhremtsev, Tobias Heuer, Peter Sanders, Sebastian Schlag 二、摘要 我们开发了一种快速且高质量的多层算法&#xff0c;能够直接将超图划分为 k 个平衡的块 —— 无需借助递…

视频问答功能播放器(视频问答)视频弹题功能实例

视频问答播放器是一种互动教学工具&#xff0c;在视频播放过程中弹出题目卡&#xff0c;学员答题后才能继续观看&#xff0c;提升学习参与度。视频问答功能播放器(视频问答)视频弹题功能实例&#xff1a; 视频播放器的视频问答功能&#xff08;也叫问答播放器、视频弹题、视频问…

2025年AI代理演进全景:从技术成熟度曲线到产业重构

2025年AI代理演进全景&#xff1a;从技术成熟度曲线到产业重构 一、技术成熟度曲线定位&#xff1a;AI代理的“期望膨胀期” 根据Gartner技术成熟度曲线&#xff08;Hype Cycle™&#xff09;&#xff0c;AI代理&#xff08;Agentic AI&#xff09;当前正处于期望膨胀期向泡沫…

基于python的机器学习(八)—— 评估算法(一)

目录 一、机器学习评估的基本概念 1.1 评估的定义与目标 1.2 常见评估指标 1.3 训练集、验证集与测试集的划分 二、分离数据集 2.1 分离训练数据集和评估数据集 2.2 k折交叉验证分离 2.3 弃一交叉验证分离 2.4 重复随机评估和训练数据集分离 三、交叉验证技术 3.…

Win11 系统登入时绑定微软邮箱导致用户名欠缺

Win11 系统登入时绑定微软邮箱导致用户名欠缺 解决思路 -> 解绑当前微软邮箱和用户名 -> 断网离线建立本地账户 -> 设置本地账户为Admin权限 -> 注销当前账户&#xff0c;登入新建的用户 -> 联网绑定微软邮箱 -> 删除旧的用户命令步骤 管理员权限打开…

Mac系统-最方便的一键环境部署软件ServBay(支持php,java,python,node,go,mysql等)没有之一,已亲自使用!

自从换成Mac电脑以后&#xff0c;做开发有时候要部署各种环境&#xff0c;如php&#xff0c;mysql&#xff0c;nginx&#xff0c;pgsql&#xff0c;java&#xff0c;node&#xff0c;python&#xff0c;go时&#xff0c;尝试过原生环境部署&#xff0c;各种第三方软件部署&…

Flink中Kafka连接器的基本应用

文章目录 前言Kafka连接器基础案例演示前置说明和环境准备步骤Kafka连接器基本配置关联数据源映射转换案例效果演示基于Kafka连接器同步数据到MySQL案例说明前置准备Kafka连接器消费位点调整映射转换与数据投递MysqlSlink持久化收集器数据最终效果演示小结参考前言 本文将基于…

Leetcode 刷题记录 11 —— 二叉树第二弹

本系列为笔者的 Leetcode 刷题记录&#xff0c;顺序为 Hot 100 题官方顺序&#xff0c;根据标签命名&#xff0c;记录笔者总结的做题思路&#xff0c;附部分代码解释和疑问解答&#xff0c;01~07为C语言&#xff0c;08及以后为Java语言。 01 二叉树的层序遍历 /*** Definition…

【R语言科研绘图】

R语言在绘制SCI期刊图像时具有显著优势&#xff0c;以下从功能、灵活性和学术适配性三个方面分析其适用性&#xff1a; 数据可视化库丰富 R语言拥有ggplot2、lattice、ggpubr等专业绘图包&#xff0c;支持生成符合SCI期刊要求的高分辨率图像&#xff08;如TIFF/PDF格式&#…

【Node.js】Web开发框架

个人主页&#xff1a;Guiat 归属专栏&#xff1a;node.js 文章目录 1. Node.js Web框架概述1.1 Web框架的作用1.2 Node.js主要Web框架生态1.3 框架选择考虑因素 2. Express.js2.1 Express.js概述2.2 基本用法2.2.1 安装Express2.2.2 创建基本服务器 2.3 路由2.4 中间件2.5 请求…

PDF 转 JPG 图片小工具:CodeBuddy 助力解决转换痛点

本文所使用的 CodeBuddy 免费下载链接&#xff1a;腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 前言 在数字化办公与内容创作的浪潮中&#xff0c;将 PDF 文件转换为 JPG 图片格式的需求日益频繁。无论是学术文献中的图表提取&#xff0c;还是宣传资料的视觉化呈现&am…