C. Tree Infection(二分)

news2024/11/28 4:36:56

Problem - 1665C - Codeforces

 

一棵树是一个没有循环的连接图。一棵有根的树有一个特殊的顶点,叫做根。一个顶点v(不同于根)的父顶点是指从根到顶点v的最短路径上的前一个顶点。

给你一棵有n个顶点的有根树。顶点1是根。最初,所有顶点都是健康的。

每一秒钟你做两个操作,传播操作,之后是注入操作。

传播:对于每个顶点,如果至少有一个v的孩子被感染,你可以通过感染你选择的v的最多一个其他孩子来传播疾病。
注入:你可以选择任何健康的顶点并感染它。
这个过程每秒重复一次,直到整个树被感染。你需要找到感染整棵树所需的最小秒数。

输入
输入由多个测试案例组成。第一行包含一个整数t(1≤t≤104)--测试案例的数量。测试用例的描述如下。

每个测试用例的第一行包含一个整数n(2≤n≤2⋅105)--给定树中顶点的数量。

每个测试用例的第二行包含n-1个整数p2,p3,...,pn(1≤pi≤n),其中pi是树中第i个顶点的祖先。

可以保证给定的图是一棵树。

保证所有测试案例的n之和不超过2⋅105。

输出
对于每个测试案例,你应该输出一个整数--感染整个树所需的最小秒数。

例子
inputCopy
5
7
1 1 1 2 2 4
5
5 5 1 4
2
1
3
3 1
6
1 1 1 1 1
输出拷贝
4
4
2
3
4

题解:
首先我们要明确:

只有同一个父节点的字节的才可以通过传播感染,子节点是无法传播到父节点的,所以父节点只能通过注入感染

但是还有一个特例,1是没有父节点的,所以他只能通过注入感染

所以初始cnt = 0

对于传播感染,前提是父节点已经感染,

然后就是二分

最先开始传播感染的应该是字结点最多的,所以我们要排一下序

每次check,x秒内是否可以全部感染完即可

剩下一些细节在代码中有注释

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define int long long
//1 1 3 3 3
int son[200050];
int cnt;
vector<int> v[200050];
int check(int x)
{
	int ans = 0;
	int k = 0;
	for(int i = 1,j = x- 1;i <= cnt;j --,i++)//被传播感染的结点,前提是有一个已经传染的父节点,所以先减1
	{
		ans += max(k,son[i] - j);
	}
	return x - cnt>= ans;//先注入感染的在这里有体现,减了cnt个注入感染的
}
void solve()
{
	int n;
	cin >> n;
	for(int i = 1;i <= n;i++)
	v[i].clear();
	for(int i = 2;i <= n;i++)
	{
		int x;
		cin >> x;
		v[x].push_back(i);
	}
	cnt = 1;//由于1没有父节点,所以1肯定是要通过方式2感染的 
	son[1] = 0;//单纯清空数组,无特殊含义 
	for(int i = 1;i <= n;i++)
	{
		if(v[i].size())
		{
			son[++cnt] = v[i].size() - 1;//要开始传播感染,首先要注入感染一个
		}
	} 
	sort(son+1,son+1+cnt,greater<>());
	int l = cnt,r = n;
	while(l <= r)
	{
		int mid = (l+r)/2;
		if(check(mid))
		{
			r = mid - 1;
		}
		else{
			l = mid + 1;
		}
		
	}
	cout<<l<<"\n";
}
signed main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve();
	}
}

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

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

相关文章

vue3 antd项目实战 表格的增删改查(一)input输入框根据关键字模糊搜索【纯前端filter过滤】

input输入框——关键字模糊搜索引言铺垫场景复现解决方案筛选的实现重置筛选信息优化处理&#xff08;监听的实现&#xff09;功能实现可能要用到的知识&#xff1a;vue3数据变化侦测&&信息筛选过滤.filter() .map() .forEach(). find()&#x1f525;vue3【watch检测/监…

10个实用的数据可视化的图表总结

用于深入了解数据的一些独特的数据可视化技术 可视化是一种方便的观察数据的方式&#xff0c;可以一目了然地了解数据块。我们经常使用柱状图、直方图、饼图、箱图、热图、散点图、线状图等。这些典型的图对于数据可视化是必不可少的。除了这些被广泛使用的图表外&#xff0c;…

JUC并发编程第四篇,Java中的各种锁之乐观锁和悲观锁、公平锁和非公平锁、可重入锁以及死锁基础

JUC并发编程第四篇&#xff0c;Java中的各种锁之乐观锁和悲观锁、公平锁和非公平锁、可重入锁以及死锁基础一、乐观锁和悲观锁二、公平锁和非公平锁三、可重入锁(递归锁)四、死锁一、乐观锁和悲观锁 乐观锁&#xff1a; 适合读操作多的场景&#xff0c;不加锁的特点能够使其读操…

《WEB前端框架开发技术》HTML5响应式旅游景区网站——榆林子州HTML+CSS+JavaScript

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

Cerebral Cortex:调节γ振荡可以促进大脑连接性而改善认知障碍

摘要 老年痴呆症造成了巨大的全球经济负担&#xff0c;但目前还缺乏有效的治疗方法。最近的研究表明&#xff0c;脑电活动的伽马波段波&#xff0c;特别是40赫兹振荡&#xff0c;与高阶认知功能密切相关&#xff0c;可以激活小胶质细胞清除淀粉样蛋白&#xff0d;β沉积。本研究…

FCOS论文复现:通用物体检测算法

摘要&#xff1a;本案例代码是FCOS论文复现的体验案例&#xff0c;此模型为FCOS论文中所提出算法在ModelArts PyTorch框架下的实现。本代码支持FCOS ResNet-101在MS-COCO数据集上完整的训练和测试流程本文分享自华为云社区《通用物体检测算法 FCOS(目标检测/Pytorch)》&#…

UML/SysML和流浪地球的地球发动机

Lucky 2022-11-24 14:33 最近收到的公众号消息有不少是sysml内容&#xff0c;请问老师sysml和uml是什么关系&#xff0c;以后的趋势是sysml取代uml吗&#xff1f; UMLChina潘加宇 SysML和UML不冲突&#xff0c;也不存在取代的关系。 UML是信息系统的建模语言。“信息系统”…

“Signal”背后的bug与解决

背景 熟悉我的老朋友可能都知道&#xff0c;之前为了应对crash与anr&#xff0c;开源过一个“民间偏方”的库Signal&#xff0c;用于解决在发生crash或者anr时进行应用的重启&#xff0c;从而最大程度减少其坏影响。 在维护的过程中&#xff0c;发生过这样一件趣事&#xff0…

python合集1

我的首个python的合集啊~~ 完全给自己看啊 不喜喷了也不里你 一、一维插值 对现有数据进行拟合或插值是数学分析中常见的方式。 通过分析现有数据&#xff0c;得到一个连续的函数&#xff08;也就是曲线&#xff09;&#xff1b;或者更密集的离散方程与已知数据互相吻合&…

HTML+CSS详细知识点(下)

&#x1f525;上一篇&#x1f525;HTMLCSS详细知识点复习&#xff08;上&#xff09; 文章目录五、列表和超链接1、列表标签2、CSS控制列表样式3、超链接六、表格和表单1、表格2、表单七、浮动与定位1、元素的浮动2、清除浮动3、overflow属性4、元素的定位属性5、position属性五…

[附源码]计算机毕业设计springboot安防管理平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【吴恩达机器学习笔记】五、逻辑回归

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为学习吴恩达机器学习视频的同学提供的随堂笔记。 &#x1f4da;专栏简介&#xff1a;在这个专栏&#xff0c;我将整理吴恩达机器学习视频的所有内容的笔记&…

【Hack The Box】linux练习-- Horizontall

HTB 学习笔记 【Hack The Box】linux练习-- Horizontall &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月27日&#x1f334; &…

Spring Cloud和Dubbo有哪些区别?

Spring Cloud Spring Cloud是⼀个微服务框架&#xff0c;提供了微服务领域中的很多功能组件&#xff0c;并且Spring Cloud是⼀个⼤⽽全的框架 Dubbo Dubbo⼀开始是⼀个RPC调⽤框架&#xff0c;核⼼是解决服务调⽤间的问题 对比&#xff1a; Dubbo则更侧重于服务调⽤&#x…

Nuxt 3.0.0正式发布,集成Element Plus、Ant Design Vue和Arco Design Vue脚手架

发布说明 Nuxt 是使用简便的 Web 框架&#xff0c;用于构建现代和高性能的 Web 应用&#xff0c;可以部署在任何运行 JavaScript 的平台上。 Nuxt 3.0 11天前正式发布了稳定版&#xff0c;3.0 基于 Vue 3&#xff0c;为 TypeScript 提供了 “一等公民” 支持&#xff0c;并进行…

java面试强基(13)

前文链接(61条消息) java面试强基&#xff08;12&#xff09;_一个风轻云淡的博客-CSDN博客https://blog.csdn.net/m0_62436868/article/details/128047427?spm1001.2014.3001.5501 何为反射&#xff1f;反射机制优缺点&#xff1f; ​ 它赋予了我们在运行时分析类以及执行类…

Jenkins部署与基础配置(1)

5 Jenkins 部署与基础配置 IP地址角色172.18.8.19jenkins-master172.18.8.29jenkins-node1172.18.8.39jenkins-node2 [rootjenkins-master ~]# tail -n1 .bashrc PS1\[\e[1;32m\][\[\e[0m\]\[\e[1;32m\]\[\e[1;33m\]\u\[\e[34m\]\h\[\e[1;31m\] \w\[\e[1;32m\]]\[\e[0m\]# [r…

ISCTF新生赛(引用传递简单社工)

猫和老鼠 反序列化题目&#xff1a; <?php //flag is in flag.php highlight_file(__FILE__); error_reporting(0);class mouse { public $v;public function __toString(){echo "Good. You caught the mouse:";include($this->v);}}class cat {public $a;p…

05 Pod:如何理解这个Kubernetes里最核心的概念?

文章目录1 为什么要有pod?2. 为什么Pod 是 Kubernetes 的核心对象&#xff1f;3. 如何用YAML描述Pod?3.1 Pod的基本组成部分3.1.1 最重要的 spec.containers 字段使用3.1.1.1为什么要定义容器启动时要执行的命令&#xff1f;4. 如何使用kubectl 操作Pod?4.1 创建pod4.2 删除…

数据结构与算法之查找算法

数据结构与算法——查找算法 本文将不断更新查找有关算法&#xff0c;由于精力有限&#xff0c;因此本博文将分多次更新&#xff0c;感谢您的关注 文章目录数据结构与算法——查找算法1. 二分法查找&#xff08;折半查找&#xff09;1.1 算法叙述1.2 实例说明2. 插值查找&#…