C. Tree Pruning【Codeforces Round 975 (Div. 1)】

news2024/10/6 18:18:45

C. Tree Pruning

在这里插入图片描述

(永远不知道为什么TLE直到把初始化的memset换成for循环

题意很简单,就是找到一个深度,使得删除最少的节点且所有的叶子节点都为这个深度。
从小到大遍历可能的深度i,容易知道所有 深度大于i的节点 和所有 子树最大深度小于i的节点 都应该被删去。
用dfs计算每个节点的子树的最大深度和每个子树最大深度的节点个数,以及每个深度的
节点数,然后就可以递推地计算出每个深度i应该保留的节点数cur,最后保存答案n-cur的最小值。

#include <bits/stdc++.h>
#define endl '\n'
#define pb push_back
#define pii pair<int,int>
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
typedef long long ll;
using namespace std;

struct node {
	int fa; //父节点
	int dep;
	vector<int> l; //临接
} d[500005]; //存储节点

int cntd[500005]; //每个深度有多少个节点
int ldp = 0; //最大深度

int mxdp[500005]; //每个节点的子树的最大深度
int mdpn[500005]; //每个 子树最大深度 的节点计数

void dfs(int x) {
	int fa = d[x].fa;
	if (fa != -1)d[x].dep = d[fa].dep + 1;
	ldp = max(ldp, d[x].dep); //当前深度的节点计数
	mxdp[x] = d[x].dep; //初始化当前节点的子树最大深度为自身深度

	for (int e : d[x].l) {
		if (e == d[x].fa) continue;
		d[e].fa = x;
		dfs(e);
		mxdp[x] = max(mxdp[x], mxdp[e]); // 更新子树最大深度
	}
	cntd[d[x].dep]++;
	mdpn[mxdp[x]]++; //增加当前子树最大深度的节点计数
}



void solve() {
	ldp = 0;
	d[1].fa = -1;
	d[1].dep = 1;
	int n;
	cin >> n;
	for (int i = 1; i <= n; i++) {
		d[i].l.clear();
		cntd[i]=mxdp[i]=mdpn[i]=0;
	}
	for (int i = 0; i < n - 1; i++) {
		int u, v;
		cin >> u >> v;
		d[u].l.pb(v);
		d[v].l.pb(u);
	}
	dfs(1);
	int ans = INF, cur = 0;
	for (int i = 1; i <= ldp; i++) {
		cur += cntd[i]; // 累加当前深度的节点数
		ans = min(ans, n - cur); // 更新最小操作数
		cur -= mdpn[i]; // 减去当前深度的最大深度节点数
	}
	cout << ans << endl;
}

signed main() {
	cin.tie(0)->ios::sync_with_stdio(0);
	int T = 1;
	cin >> T;
	while (T--) {
		solve();
	}
	return 0;
}

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

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

相关文章

vue出现Component name “Politic“ should always be multi-word错误

效果 原因 组件名不能为单个单词&#xff0c;怕和html标签混淆 解决方法 1.选择多个单词区分 2.修改package.json里的rules规则&#xff0c;忽略文件命名校验

详细解释:前向传播、反向传播等

详细解释:前向传播、反向传播等 在机器学习和深度学习中,**前向传播(Forward Propagation)和反向传播(Backward Propagation)**是训练神经网络的两个核心过程。理解这两个概念对于掌握神经网络的工作原理、优化方法以及模型微调技术(如LoRA、P-tuning等)至关重要。以下…

YOLO11改进|注意力机制篇|引入ELA注意力机制

目录 一、【ELA】注意力机制1.1【ELA】注意力介绍1.2【ELA】核心代码 二、添加【ELA】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【ELA】注意力机制 1.1【ELA】注意力介绍 这篇论文的作者通过分析Coordinate Attention(C…

Python中的数据可视化:从入门到进阶

数据可视化是数据分析和科学计算中的重要环节&#xff0c;它通过图形化的方式呈现数据&#xff0c;使复杂的统计信息变得直观易懂。Python提供了多种强大的库来支持数据可视化&#xff0c;如Matplotlib、Seaborn、Plotly等。本文将从基础到进阶&#xff0c;详细介绍如何使用这些…

如何构建LSTM神经网络模型

一、了解LSTM 1. 核心思想 首先&#xff0c;LSTM 是 RNN&#xff08;循环神经网络&#xff09;的变体。它通过引入细胞状态 C(t) 贯穿于整个网络模型&#xff0c;达到长久记忆的效果&#xff0c;进而解决了 RNN 的长期依赖问题。 2. 思维导图 每个LSTM层次都有三个重要的门结构…

贝尔曼公式

为什么return 非常重要 在选择哪个策略更好的时候&#xff0c;此时需要使用到return&#xff0c;比如下面三个策略的返回值。 策略1: 策略2&#xff1a;策略3&#xff1a;涉及到两个policys path How to calculate return 定义 上图定义了不同的起点下的return value 递推…

优化销售漏斗建立高效潜在客户生成策略的技巧

如何建立有效的潜在客户生成策略&#xff1f;建立有效潜在客户生成策略需要准确定义目标受众&#xff0c;利用内容营销、SEO、社交媒体、邮件营销和定向广告吸引客户&#xff0c;参加行业会议并跟踪分析数据。借助Zoho CRM系统&#xff0c;企业能够更加高效地管理客户信息&…

Windows上 minGW64 编译 libssh2库

下载libssh2库:https://libssh2.org/download/libssh2-1.11.0.zip 继续下载OpenSSL库: https://codeload.github.com/openssl/openssl/zip/refs/heads/OpenSSL_1_0_2-stable

算法讲解—最小生成树(Kruskal 算法)

算法讲解—最小生成树&#xff08;Kruskal 算法&#xff09; 简介 根据度娘的解释我们可以知道&#xff0c;最小生成树(Minimum Spanning Tree, MST)就是&#xff1a;一个有 n n n 个结点的连通图的生成树是原图的极小连通子图&#xff0c;且包含原图中的所有 n n n 个结点…

【Diffusion分割】CTS:基于一致性的医学图像分割模型

CTS: A Consistency-Based Medical Image Segmentation Model 摘要&#xff1a; 在医学图像分割任务中&#xff0c;扩散模型已显示出巨大的潜力。然而&#xff0c;主流的扩散模型存在采样次数多、预测结果慢等缺点。最近&#xff0c;作为独立生成网络的一致性模型解决了这一问…

【Python】数据可视化之聚类图

目录 clustermap 主要参数 参考实现 clustermap sns.clustermap是Seaborn库中用于创建聚类热图的函数&#xff0c;该函数能够将数据集中的样本按照相似性进行聚类&#xff0c;并将聚类结果以矩阵的形式展示出来。 sns.clustermap主要用于绘制聚类热图&#xff0c;该热图通…

云计算第四阶段 CLOUD2周目 01-03

国庆假期前&#xff0c;给小伙伴们更行完了云计算CLOUD第一周目的内容&#xff0c;现在为大家更行云计算CLOUD二周目内容&#xff0c;内容涉及K8S组件的添加与使用&#xff0c;K8S集群的搭建。最重要的主体还是资源文件的编写。 (*^▽^*) 环境准备&#xff1a; 主机清单 主机…

CUDNN下载配置

目录 简介 下载 配置 简介 cuDNN&#xff08;CUDA Deep Neural Network library&#xff09;是NVIDIA开发的一个深度学习GPU加速库&#xff0c;旨在提供高效、标准化的原语&#xff08;基本操作&#xff09;来加速深度学习框架&#xff08;如TensorFlow、PyTorch等&#xf…

Rust 快速入门(一)

Rust安装信息解释 cargo&#xff1a;Rust的编译管理器、包管理器、通用工具。可以用Cargo启动新的项目&#xff0c;构建和运行程序&#xff0c;并管理代码所依赖的所有外部库。 Rustc&#xff1a;Rust的编译器。通常Cargo会替我们调用此编译器。 Rustdoc&#xff1a;是Rust的…

Java 面向对象设计一口气讲完![]~( ̄▽ ̄)~*(上)

目录 Java 类实例 Java面向对象设计 - Java类实例 null引用类型 访问类的字段的点表示法 字段的默认初始化 Java 访问级别 Java面向对象设计 - Java访问级别 Java 导入 Java面向对象设计 - Java导入 单类型导入声明 按需导入声明 静态导入声明 例子 Java 方法 J…

decltype推导规则

decltype推导规则 当用decltype(e)来获取类型时&#xff0c;编译器将依序判断以下四规则&#xff1a; 1.如果e是一个没有带括号的标记符表达式(id-expression)或者类成员访问表达式&#xff0c;那么decltype(e)就是e所命名的实体的类型。此外&#xff0c;如果e是一个被重载的函…

k8s 之安装metrics-server

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/01/29 18:25 metrics-server可帮助我们查看pod的cpu和内存占用情况 kubectl top po nginx-deploy-56696fbb5-mzsgg # 报错&#xff0c;需要Metrics API 下载 Metrics 解决 wget https://github.com/kubernetes-sigs/metri…

基于auth2的单点登录原理理解

创作背景&#xff1a;基于auth2实现企业门户与业务系统的单点登录跳转。 架构组成&#xff1a;4A统一认证中心&#xff0c;门户系统&#xff0c;业务系统&#xff0c;用户&#xff1b; 实现目标&#xff1a;用户登录门户系统后&#xff0c;可通过点击业务系统菜单&#xff0c…

字符串数学专题

粗心的小可 题目描述 小可非常粗心&#xff0c;打字的时候将手放到了比正确位置偏右的一个位置&#xff0c;因此&#xff0c;Q打成了W&#xff0c;E打成了R&#xff0c;H打成了J等等。键盘如下所示 现在给你若干行小可打字的结果&#xff0c;请你还原成正确的文本。 输入描述…

嵌入式面试八股文(五)·一文带你详细了解程序内存分区中的堆与栈的区别

目录 1. 栈的工作原理 1.1 内存分配 1.2 地址生长方向 1.3 生命周期 2. 堆的工作原理 2.1 动态内存分配 2.1.1 malloc函数 2.1.2 calloc函数 2.1.3 realloc函数 2.1.4 free函数 2.2 生命周期管理 2.3 地址生长方向 3. 堆与栈区别 3.1 管理方式不同…