C. Infected Tree(思维+DFS)

news2024/11/18 21:39:27

Problem - 1689C - Codeforces

Byteland是一片美丽的土地,因其美丽的树木而闻名。

米沙发现了一棵有n个顶点的二叉树,编号从1到n。二叉树是一个无环连接的双向图,包含n个顶点和n-1条边。每个顶点的度数最多为3,而根是数字为1的顶点,它的度数最多为2。

不幸的是,根部被感染了。

下面的过程会发生N次。

Misha要么选择一个没有被感染(也没有被删除)的顶点,并删除它和所有以这个顶点为终点的边,要么就什么都不做。
然后,感染扩散到每个与已经被感染的顶点相连的边的顶点(所有已经被感染的顶点仍然被感染)。
由于Misha没有太多时间考虑,请告诉他他能从感染中救出的顶点的最大数量(注意,删除的顶点不计入救出的顶点)。

输入
在输入数据中,有几个测试案例。第一行包含一个整数t(1≤t≤5000)--测试案例的数量。接下来是测试用例的描述。

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

测试用例中接下来的n-1行中的第i行包含两个正整数ui和vi(1≤ui,vi≤n),意味着在图中它们之间存在一条边。

保证该图是一棵以1为根的二叉树,也保证所有测试案例的n之和不超过3⋅105。

输出
对于每个测试案例,输出Misha可以保存的最大顶点数量。

题解:
由于从根部开始进行感染,如果这个根有左右节点,那么那么我们会切除其中一个,但是另一个会被继续感染,那么这种情况到什么时候结束呢,

有两种情况

1.出现叶子节点(没有后续节点的点),我们肯定会删除不是叶子节点的点,到此结束

2.出现单分支节点,类似

这种情况下我们切除被感染的下一个节点,到此结束

如果理解了上面的分析相信大家就能看到,每经过一秒,就会有两个结点牺牲,直到遇到单分支结点或者叶子结点为止,

如果遇到单分支结点,最后就是单分支的孩子结点被砍,

而如果是叶子结点,那么最后就是叶子结点被感染,

通过这样的分析,大家肯定能发现每经过一秒牺牲的结点所在的层次数就会+1,直到遇到上面两种情况为止,所以题目就转化为求出距离根节点最近的叶子结点或者是单分支结点,

如果距离根节点的最近结点是叶子结点,那么牺牲的结点数就是叶子结点所在的层数*2-1,

而如果距离根节点的最近结点是单分支结点,那么牺牲的结点数就是单分支结点所在层数*2,答案就是总结点个数减去牺牲的结点个数即可。

 注意根节点由于没有父节点,所以他的出边要比正常结点少1,所以需要特殊判断一下。

#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 n,ans;
vector<int> p[300050];
void dfs(int x,int fa,int d)
{
	if(p[x].size() == 2&&x != 1)
	{
		ans = max(ans,n - 2*d);
	}
	else if(p[x].size() == 1)
	{
		if(x == 1)
		{
			ans = max(ans,n - 2);
		}
		else
		{
			ans = max(ans,n - (2*d-1));
		}
	}
	for(int i = 0;i < p[x].size();i++)
	{
		int j = p[x][i];
		if(j == fa)
		continue;
		dfs(j,x,d+1);
	}
}
void solve()
{
	cin >> n;
	for(int i = 1;i <= n;i++)
	p[i].clear();
	for(int i = 1;i <n;i++)
	{
		int l,r;
		cin >> l >>r;
		p[l].push_back(r);
		p[r].push_back(l);
	}
	ans = 0;
	dfs(1,-1,1);
	cout<<ans<<"\n";
}
signed main()
{
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve();
	}
}
//2 5
//3
//9 7 


//2  3 4 3
//1 2 3 4 5
//      3

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

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

相关文章

基于STM32G431嵌入式学习笔记——五、NVIC中断(以串口UART中断为例)

一、基础知识 1.专业术语 2.NVIC简介 ①在这里要注意&#xff0c;中断控制是分级处理的 ②是否请求中断是中断源控制的。 ③是否响应中断是响应方控制的。 ④以外部中断为例&#xff0c;外部中断请求顺序就是首先从请求的外部设备中选出优先级最高的一个设备待中断&#xff0c…

唐山盐碱滩成渤海明珠 国稻种芯·中国水稻节:河北曹妃甸大米

唐山盐碱滩成渤海明珠 国稻种芯中国水稻节&#xff1a;河北曹妃甸大米 新华社音视频部制作 记者 杨世尧 河北新闻网讯 王士波 赵诤国 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健康…

电脑怎么迁移游戏资源,数据迁移能把游戏数据迁移吗

概述&#xff1a;玩家们在打游戏的过程中&#xff0c;会产生很多数据&#xff0c;尤其是那些大型游戏的玩家&#xff0c;都会珍惜游戏数据。电脑怎么迁移游戏资源&#xff1f;如果您刚刚购买了一台新电脑&#xff0c;并且正在寻找将游戏迁移到新电脑的方法&#xff0c;相信本文…

8 张图 | 剖析 Eureka 的首次同步注册表

注册表对于注册中心尤为重要&#xff0c;所有的功能都是围绕这个注册表展开。比如服务 A 要想访问服务 B&#xff0c;就得知道服务 B 的 IP 地址和端口号吧。如下图所示&#xff0c;传统的方式就是服务 A 知道了服务 B 的地址后&#xff0c;发送 HTTP 请求到对应的 API 地址上。…

MySQL事务管理 MVCC,隔离性详解

目录事务管理事务背景什么是事务&#xff1f;事务的四个属性为什么会出现事务?MySQL支持事务的版本事务提交方式事务常见操作方式演示(体现原子性和持久性)操作注意事项结论事务隔离性查看与设置隔离性各种隔离性演示读未提交【Read Uncommitted】脏读读提交【Read Committed】…

【SNUT集训1】排序 二分 前缀和 差分(6 / 16)

目录 P1094 [NOIP2007 普及组] 纪念品分组 - 排序贪心双指针 P1571 眼红的Medusa - 哈希表 P1678 烦恼的高考志愿 P1024 [NOIP2001 提高组] 一元三次方程求解 1、二分法 2、暴力 P7585 [COCI2012-2013#1] LJUBOMORA - 二分 P4552 [Poetize6] IncDec Sequence- 差分思维…

【Vue学习之从入门到神经】

14天学习训练营导师课程&#xff1a; 郑为中《Vue和SpringBoot打造假日旅社管理系统》 目录 1. VUE介绍 2. Vue导入 3. VUE相关指令 4. 显示隐藏相关 5. Vue周边库 1. VUE介绍 VUE是目前最流行的前端框架, 基于MVVM设计模式VUE框架两种用法: 多页面应用, 在html页面中引入…

【HMS Core】游戏初始化

前提条件 实现游戏初始化前&#xff0c;必须已经完成AppGallery Connect的配置准备&#xff0c;参见AGC控制台准备。已完成集成SDK和配置混淆脚本。 注意事项 本场景中涉及的功能必须在应用启动时完成&#xff0c;而不是用户在进行登录、支付等操作时才完成&#xff0c;否则可…

无线传感器网络:物理层设计

文章目录Physical Layer TechnologiesRadio FrequenciesNarrow-Band CommunicationSpread SpectrumDSSSFHSSUltra Wide Band (UWB)Optical CommunicationAcoustic CommunicationMagnetic Induction CommunicationRF Wireless CommunicationWireless Channel EffectsAttenuation…

项目工作中,管理者如何合理安排任务优先级?

面对各种工作的时候&#xff0c;你是否总是会手忙脚乱&#xff1f; 在项目工作中&#xff0c;管理者每天面对各种工作&#xff1a;需求、沟通还有其他五花八门任务。 管理者应该如何合理安排自己任务的优先级呢&#xff1f; 在安排任务优先级的时候&#xff0c;我最常用方法…

后台部署运维零碎总结

一、场景 为了实现项目部署简化&#xff0c;尽量都由脚本来完成&#xff0c;需要将许多手动处理过程进行脚本化处理。 二、环境 1、VMware 虚拟机 Download VMware Workstation Pro 2、获取CentOs 镜像 3、使用镜像在虚拟机中安装 4、配置网卡信息&#xff0c;重启网络 三…

【算法基础复习1】差分

目录 一、差分简介 一维差分结论 Acwing.797 差分 P4552 [Poetize6] IncDec Sequence - 差分思维玄学题 一、差分简介 规定a数组下标从1开始 a[0]0b数组下标从1开始定义一个数组b&#xff0c;使 对于a数组 其差分数组b为 a是b的前缀和数组 比如 a[2]…

Python实战 | 如何抓取tx短片弹幕并作词云图分析

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 本次目的&#xff1a;采集tx短片弹幕,并且做词云图可视化分析 这个不少漫迷应该都看过吧~ 哪里都好&#xff0c;就是更新太慢了一点&#xff0c;剧情磨蹭了一点&#xff0c;哎 那今天我们就来采集一下它的弹幕吧&#xff…

我把提高开发效率的VSCode插件分享出来了

前言 最近在家办公&#xff0c;写代码发现没有那么流畅&#xff0c;一看是某些插件没有安装&#xff0c;搞得写代码的效率降低&#xff0c;所以这里有些比较实用的插件推荐给大家 开发实用插件 Settings Sync 利用 Settings Sync &#x1f48e;将 VS Code 的设置保存在gith…

MCE | HPV 疫苗要不要打?

HPV 感染很大概率会患宫颈癌&#xff1f;HPV 感染 ≠ 患宫颈癌超过 90&#xff05; 的 HPV 感染者无症状&#xff0c;并无需干预能在 2 年内清除感染。虽然大部分 HPV 感染会自行消退&#xff0c;但所有感染女性都面临 HPV 感染转为慢性&#xff0c;以及癌前病变发展为浸润性宫…

ViewPager2+TabLayout

效果图&#xff1a; MainActivity public class MainActivity extends AppCompatActivity {private TabLayout tabLayout;private ViewPager2 viewPager2;private int activeColor Color.parseColor("#ff678f");private int normalColor Color.parseColor("#…

C++入门教程||C++中的输入输出||C++ 注释

1. cout输出流的使用&#xff1a; cout输出流需要搭配<<输出操作符来使用&#xff0c;如输出语句&#xff1a; 1 cout<<"Hello"; 即会在屏幕上显示字符串Hello。 本质上&#xff0c;是将字符串"Hello"插入到cout对象里&#xff0c;并以cout…

一些RCE的汇总

RCE自增RCE参考[CTFshow-RCE极限大挑战官方wp]RCE-1[过滤.(]RCE-2p[自增-Array]RCE-3[自增-NAN-<105字符]RCE-4[自增-NAN-<84字符]RCE-5[自增-gettext扩展]72位字符68位字符无参数RCE参考[RCE篇之无参数rce]介绍例题一些能用上的函数前两天刚好ctfshow有个RCE极限大挑战&…

网络基础知识总结+网络设备介绍(运维必备网络知识)

什么是网络 网络是由多台计算机&#xff08;或手机等&#xff09;通过网络设备&#xff08;交换机以及路由器&#xff09;及网线&#xff08;或无线&#xff09;连接起来&#xff0c;按照一定的规范规则则彼此进行通信的系统总称。 为什么要有网络 网络出现的最核心需求就是…

[足式机器人]Part3机构运动微分几何学分析与综合Ch01-3 平面运动微分几何学——【读书笔记】

本文仅供学习使用 本文参考&#xff1a; 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch01-3 平面运动微分几何学1.2.2 瞬心线-21.2.3 点轨迹的Euler-Savary公式1.2.2 瞬心线-2 &#xff08;3&#xff09;平面连杆机构&#xff08;二自由度开链串联机构…