首页 > 其他分享 >CF1689C题解

CF1689C题解

时间:2024-08-07 16:06:08浏览次数:8  
标签:题解 感染 CF1689C ans now root 节点 病毒

CF1689C Infected Tree 题解

怎么只有我这个蒟蒻不会 DP 啊。

回归正题……

简化题意

给定一棵以 $1$ 号节点为根的二叉树,总节点个数为 $n$。现在 $1$ 号节点感染了病毒,你在这一回合里可以使病毒所在节点的一个儿子不被感染,而病毒会感染一个不受保护的儿子。

询问最多可以有多少不被病毒感染且不被保护的点。

思路整理

这是二叉树!!!

由于我们要求最多不被感染且不被保护的点,可以贪心地想:想要答案最大,不就是病毒行走路径最短吗?

DP 来干嘛?DFS 就完事了嘛!

设置变量 $ans$,表示被保护的点和被感染的点的总和;设当前节点儿子数量为 $D$。

如果 $D = 0$,说明病毒已经无法继续感染了,那么 $ans = \max(ans, now)$。

如果 $D = 1$,说明只要保护子节点,病毒将无法继续感染了,那么 $ans = \max(ans, now)$。

如果 $D = 2$,说明防疫工作仍然漫长,那么继续向下搜索

最终答案就是 $n - ans$。

核心代码:

void dfs(int fa, int root, int now){
	if(G[root].size() == 1){
		if(now < ans)ans = now;//病毒感染到树顶
		return ;
	}
	if(G[root].size() == 2){
		if(now + 1 < ans)ans = now + 1//只有一个儿子, 赶紧保护;
		return ;
	}
	for(int i = 0; i < G[root].size(); i++){
		if(G[root][i] == fa)continue;
		dfs(root, G[root][i], now + 2); // now + 2是因为你要保护一个儿子,而病毒会感染一个孩子
	}
}

代码运行很成功,没有花里胡哨的优化,但是当时是最优解。

求赞

标签:题解,感染,CF1689C,ans,now,root,节点,病毒
From: https://www.cnblogs.com/jinhui926/p/18347214

相关文章

  • 烧烤 题解
    题目id:11063题目描述\(Snuke\)有一个烧烤聚会。聚会上,他将制作\(N\)份串烧。$\\\\\\\$一份串烧他有\(2N\)根烤肉钎子,它们都将用于制作串烧。第i个烤肉钎子的长度为Li。此外,他有无限供应的原料。他将原料串在两根烤肉钎子上做成一份串烧。一份串烧可串起的原料的最大......
  • 信创系统问题解决笔记
    本文记述解决信创系统显示问题过程经历,描述遇到的各种问题以及解决方法。问题描述测试反馈,在信创系统上,部分界面字体显示异常,表现为内容越界、文字区域显示为小空格,如下图所示:初步分析是字体原因,具体情况需要更进一步分析。问题复现测试团队的信创测试环境有UOS和Kylin两个......
  • CF1999题解
    题目链接CF1999A解题思路模拟。没了。参考代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?打cf不要用umap!!!记住,rating是身外之物。该冲正解时冲正解!Problem:算法:思路:*/#include<bits/stdc++.h>usin......
  • 2024.8.7 模拟赛题解
    T1过于简单,不必阐述。T2给定一个仅包含\(A\)和\(P\)的字符串,每次操作可以删除相邻的\(AP\)或者\(PP\),问字符串最后的最小长度。$Sol:$为求最值问题,考虑贪心。先给出考场做法。发现若干的\(P\)是一定能合并掉的,于是贪心策略,就是如何最小化\(A\)的个数。对于每个......
  • 题解:Codeforces Round 964 (Div. 4) A
    A.A+BAgain?timelimitpertest:1secondmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputGivenatwo-digitpositiveinteger\(n\),findthesumofitsdigits.InputThefirstlinecontainsaninteger\(t\)(\(1......
  • 【题解】Solution Set - NOIP2024集训Day1 数据结构
    【题解】SolutionSet-NOIP2024集训Day1数据结构https://www.becoder.com.cn/contest/5429「CF1428F」FruitSequences线段树是可以维护区间最长子段的1。记固定右端点在\(i\),的答案为\(f_i\)。那么:\(a_i=0\),\(f_i=f_{i-1}\);\(a_i=1\),打一个单调栈维护所有的最长子......
  • 题解:P10543 [THUPC 2024 决赛] 黑白
    好题。题意\(n\timesm\)的网格图初始每个格子有黑有白,两人轮流操作,每次选择一个白格染黑。操作后不能存在一条\((1,1)\)到\((n,m)\)的路径,否则本次操作者输,另一人赢。思路首先判断是否一上来就输了。易发现到最后一定会操作到只剩一条道路,设路径长度为\(s\),那么\(s\)......
  • 题解:UVA11181 条件概率 Probability|Given
    主要思路:概率期望。首先可以发现\(n\)的数据极小。然后我们设\(a\)为为每个人买东西的情况,\(b\)为当有\(b\)个人去时的情况。大家都应该知道条件概率式子为\(P(a|b)=\frac{P(ab)}{P(b)}\)。然后暴力搜索\(P(ab)\)和\(P(b)\)。其实这道题有复杂度更低的dp做法,但......
  • 题解:CF1896G Pepe Racing
    主要思路:构造。思路方法一一个一个的找,分别查询\([1,n],[n+1,2n],\dots,[n(n-1)+1,n^{2}]\)中最快的人,再把\(n\)个人合起来查询,不过很明显的是,这个方法很蠢,并不能切掉此题。方法二找第二快的人,只有最快的人在的一组需重新询问,剩下答案无需改变。需排除的人的一组用不是现......
  • 2024牛客暑期多校训练营7 C Array Sorting 题解
    乱搞非正解写法。分类讨论各种情况。降序排序对应交换即可数组个数小直接考虑相邻的交换其他都看做随机数据考虑结合前面情况,很容易想到,先把数组变成一个尽量有序的数组(每个元素和自己正确的位置相差不大)。最后再多次相邻交换,使得每个元素都在正确位置。把数组变成......