当前位置: 首页 > news >正文

洛谷 P3000 [USACO10DEC] Cow Calisthenics G

思路

题目要求断若干条边后形成的连通块中,最大的直径最小,很明显的二分。关键就在于如何写 c h e c k check check 函数了。

可以用 d f s dfs dfs 来判断要断哪条边。

一、 d [ u ] d[u] d[u] 定义

d [ u ] d[u] d[u] 为从 u u u 出发到子树中【断开边后连通块的叶子节点】所经过的最多的节点数,包括 u u u 节点自己。

这句话可能比较难理解。设 v v v u u u 的一个子节点,那么程序会先递归判断以 v v v 为根的子树中哪些边需要被断掉。那么再回朔到 u u u 节点时,子树 v v v 就算一个被删了一些边的连通块,那么子树 v v v 就会有一些新的叶子节点。这些新叶子节点到 u u u 会经过若干节点, d [ u ] d[u] d[u] 就代表【经过节点数最多的】那条路径上的【节点数】。

如此一来, d [ v ] d[v] d[v] 就表示从 v v v 出发到其子树叶子节点经过的最多节点数。同时,它还可以表示节点 u u u 走到【以 v v v 为根的子树的叶子节点】所经过的最多边数。

(本人在看其他题解时想了好一会才想明白,因此花了这么多文字来解释,太菜了)

二、断边条件

现在考虑什么情况断边。

假设 m a x d maxd maxd目前所扫过的所有子节点 v v v d [ ] d[] d[] 值最大的那个。

现在又扫完一个新节点 v ′ v' v:若 m a x d + d [ v ′ ] > l i m i t maxd + d[v'] > limit maxd+d[v]>limit,那就断边;否则用 d [ v ′ ] d[v'] d[v] 更新 m a x d maxd maxd

问题又来了,断边时有两条边可供断开(即: m a x d , d [ v ′ ] maxd, d[v'] maxd,d[v] 分别代表的那一条),该断哪一条?

贪心的想,我们肯定要保留值较小的那一条。因为若保留大的,它未来可能会与其他更多的 d [ ] d[] d[] 相加超出限制,导致更多的断边,这样显然时更劣的。

代码

#include <bits/stdc++.h>using namespace std;const int maxn = 1e5 + 7;int n, m;
vector<int> e[maxn];int d[maxn], cnt;
void dfs(int u, int f, int lim) {if (cnt > m) return ;int maxd = 0;for (int v : e[u]) {if (v == f) continue;dfs(v, u, lim);if (maxd + d[v] > lim)  // 超出限制, 断边, 并保留较小的那一条边 ++cnt, maxd = min(maxd, d[v]);else maxd = max(maxd, d[v]);  // 没有超出限制, 更新 maxd }d[u] = maxd + 1;
}
bool check(int x) {cnt = 0, dfs(1, 0, x);return cnt <= m;
}
int main() {scanf("%d%d", &n, &m);for (int i = 1; i < n; ++i) {int u, v;scanf("%d%d", &u, &v);e[u].push_back(v);e[v].push_back(u);}// 二分最大直径的最小值 int l = 0, r = n - 1;int ans = 0;while (l <= r) {int mid = (l + r) >> 1;if (check(mid)) ans = mid, r = mid - 1;else l = mid + 1;}printf("%d\n", ans);return 0;
} 

若觉得此篇题解过于冗长,可以看看这篇

相关文章:

洛谷 P3000 [USACO10DEC] Cow Calisthenics G

思路 题目要求断若干条边后形成的连通块中&#xff0c;最大的直径最小&#xff0c;很明显的二分。关键就在于如何写 c h e c k check check 函数了。 可以用 d f s dfs dfs 来判断要断哪条边。 一、 d [ u ] d[u] d[u] 定义 设 d [ u ] d[u] d[u] 为从 u u u 出发到子树…...

Web渗透测试之XSS跨站脚本攻击 盲打 详解

目录 XSS盲打 什么是盲打: 盲打主要目的 XSS盲打 什么是盲打: 发现某个页面有xss漏洞 但是注入后没看到效果 而是在其它页面进行xss显示的效果 这种就叫盲打. 我注册了一个网站的用户 注册页面存在xss漏洞跳转到首页 看不到注册信息的输出 当管理员打开页面查看什么用户…...

经典编程题:服务器广播

题目描述&#xff1a; 服务器连接方式包括直接相连&#xff0c;间接连接。A 和 B 直接连接&#xff0c;B 和 C 直接连接&#xff0c;则 A 和 C 间接连接。直接连接和间接连接都可以发送广播。 给出一个 N*N 数组&#xff0c;代表 N 个服务器&#xff0c;matrix[i][j]1&#xf…...

【网络协议】静态路由详解

网络中的路由器通过以下两种方式之一发现远程网络&#xff1a; 静态配置路由动态路由协议 在本文&#xff0c;我们将学习关于静态路由的各种概念&#xff0c;例如如何配置静态路由、路由表如何进行决策、路由接口等相关知识。 文章目录 引言直连网络静态路由路由表原则原则1原…...

朝天椒USB服务器在银泰证券虚拟化超融合场景的应用案例

在数字化浪潮席卷金融行业的今天&#xff0c;银泰证券作为业内知名的金融机构&#xff0c;始终致力于提升业务运营效率与数据安全性。面对虚拟化超融合场景下各种认证U盾的管理挑战&#xff0c;银泰证券选择了朝天椒USB服务器作为其解决方案&#xff0c;成功实现了U盾在虚拟机中…...

.NET framework、Core和Standard都是什么?

对于这些概念一直没有深入去理解&#xff0c;以至于经过.net这几年的发展进化&#xff0c;概念越来越多&#xff0c;越来越梳理不容易理解了。内心深处存在思想上的懒惰&#xff0c;以为自己专注于Unity开发就好&#xff0c;这些并不属于核心范畴&#xff0c;所以对这些概念总是…...

FairGuard游戏安全2024年度报告

导 读&#xff1a;2024年&#xff0c;国内游戏市场实际销售收入3257.83亿元&#xff0c;同比增长7.53%&#xff0c;游戏用户规模6.74亿人&#xff0c;同比增长0.94%&#xff0c;市场收入与用户规模双双实现突破&#xff0c;迎来了历史新高点。但游戏黑灰产规模也在迅速扩大&…...

JetBrains IDEs和Visual Studio Code的对比

JetBrains IDEs和Visual Studio Code的对比 JetBrains IDEs是捷克JetBrains公司开发的一系列集成开发环境(IDE)。以下是具体介绍:IntelliJ IDEA是JetBrains 公司的一款产品 主要产品 IntelliJ IDEA:一款功能强大且广泛应用的Java集成开发环境,有开源免费的社区版和商业收…...

文件剪切走:深度解析与高效恢复策略

一、文件剪切走现象解读 在计算机的日常使用中&#xff0c;“文件剪切走”这一术语形象地描述了文件在移动过程中意外丢失的现象。当用户尝试将文件从一个位置“剪切”并粘贴到另一个位置时&#xff0c;如果操作不当或系统出现异常&#xff0c;可能会导致文件在源位置消失&…...

Win32汇编学习笔记09.SEH和反调试

Win32汇编学习笔记09.SEH和反调试-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net SEH - structed exception handler 结构化异常处理 跟筛选一样都是用来处理异常的,但不同的是 筛选器是整个进程最终处理异常的函数,但无法做到比较精细的去处理异常(例如处理…...

[人工智能]CSDN创作助手体验

一、什么是智能体 智能体是一种能够感知环境、学习、推理和行动的实体。它可以是一个计算机程序、机器人或其他类似的系统。智能体的目标是通过与环境的交互来实现特定的任务或目标。 智能体通常由以下几个组件组成&#xff1a; 感知器&#xff1a;感知器是智能体与环境之间的…...

vue3中el-table实现多表头并表格合并行或列

1、el-table中添加事件 :span-method"genderSpanCity" <el-table :span-method"genderSpanCity":data"data.tableData":fit"true" table-layout"fixed" header-align"center" stripestyle"width:100%;he…...

HTML+CSS+JS制作中国传统节日主题网站(内附源码,含5个页面)

一、作品介绍 HTMLCSSJS制作一个中国传统节日主题网站&#xff0c;包含首页、节日介绍页、民俗文化页、节日活动页、联系我们页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。 二、页面结构 1. 顶部横幅区 包含传统中国风格的网站标题中国传统…...

时空笔记:CBEngine(微观交通模拟引擎)

CBEngine 是一个微观交通模拟引擎&#xff0c;可以支持城市规模的道路网络交通模拟。CBEngine 能够快速模拟拥有数千个交叉路口和数十万辆车辆的道路网络交通。 以下内容基本翻译自CBEngine — CBLab 1.0.0 documentation 1 模拟演示 1.0 模拟演示结构 config.cfg 定义了 roa…...

【LeetCode】力扣刷题热题100道(26-30题)附源码 轮转数组 乘积 矩阵 螺旋矩阵 旋转图像(C++)

目录 1.轮转数组 2.除自身以外数组的乘积 3.矩阵置零 4.螺旋矩阵 5.旋转图像 1.轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 class Solution { public:void rotate(vector<int>& nums, int k) …...

【C++】字符串的 += 和 + 运算详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;1. 字符串的 和 基本用法1.1 的用法1.2 的用法 &#x1f4af;2. 示例代码的剖析与解释代码分析 &#x1f4af;3. 底层实现与性能分析3.1 的实现原理3.2 的实现原理3.…...

多模态大模型部署:结合dify

文章目录 前言minicpm-vDify测试一下总结部署过程回顾集成与测试实验结果分析展望未来 前言 上回说道&#xff0c;我们用ollama部署了一个多模态的大模型&#xff0c;也就是minicpm-v&#xff1a; 但这玩意儿感觉只能打字啊。 怎么给它发图片呢&#xff1f; minicpm-v Mini…...

Matlab Steger提取条纹中心(非极大值抑制)

文章目录 一、简介二、实现代码三、实现效果一、简介 由于在确定条纹的ROI区域之后,会计算出多个条纹中心坐标,因此这里就需要对其进行则优选择,毕竟条纹只有一条,这最简单的方式就是使用非极大值抑制,即选择每一行/列最好的条纹中心。 二、实现代码 Hessian2D.m function…...

springboot + vue+elementUI图片上传流程

1.实现背景 前端上传一张图片&#xff0c;存到后端数据库&#xff0c;并将图片回显到页面上。上传组件使用现成的elementUI的el-upload。、 2.前端页面 <el-uploadclass"upload-demo"action"http://xxxx.xxx.xxx:9090/file/upload" :show-file-list&q…...

LabVIEW 系统诊断

LabVIEW 系统诊断是指通过各种工具和方法检测、评估、分析和解决 LabVIEW 程序和硬件系统中可能存在的故障和性能问题。系统诊断不仅涵盖软件层面的调试与优化&#xff0c;还包括硬件交互、数据传输、实时性能等方面的检查和分析。一个成功的系统诊断能够显著提升LabVIEW应用程…...

Linux使用详解(进阶篇)

文章目录Linux使用详解(进阶篇)1.Linux目录说明2.操作防火墙3.ulimit命令和history命令4.RPM和Yum的使用5.设置系统字符集6.vi & vim编辑器7.文件同步、复制8.利用SCP命令进行文件传输Linux使用详解(进阶篇) 1.Linux目录说明 bin -> usr/bin 这个目录存放的是&#xff…...

告别复杂配置!Qwen-Image-2512图片生成服务保姆级部署教程

告别复杂配置&#xff01;Qwen-Image-2512图片生成服务保姆级部署教程 1. 为什么选择这个镜像&#xff1f; 在AI图片生成领域&#xff0c;Qwen-Image-2512模型以其出色的中文理解和图像质量著称。但传统部署方式往往需要面对以下挑战&#xff1a; 复杂的Python环境配置数十G…...

解锁Noria查询重用机制:如何智能复用数据流组件实现应用性能飞跃

解锁Noria查询重用机制&#xff1a;如何智能复用数据流组件实现应用性能飞跃 【免费下载链接】noria Fast web applications through dynamic, partially-stateful dataflow 项目地址: https://gitcode.com/gh_mirrors/no/noria 在现代Web应用开发中&#xff0c;性能优化…...

云容笔谈惊艳作品集:LSTM时序预测辅助下的动态叙事画面生成

云容笔谈惊艳作品集&#xff1a;LSTM时序预测辅助下的动态叙事画面生成 你有没有想过&#xff0c;把一段小说文字直接变成一部动态的视觉预告片&#xff1f;这听起来像是科幻电影里的情节&#xff0c;但现在&#xff0c;借助一些前沿的AI技术&#xff0c;我们离这个目标越来越…...

从CAN到UAVCAN:一文搞懂两种协议的核心差异及迁移指南

从CAN到UAVCAN&#xff1a;两种通信协议的深度解析与迁移实战 在嵌入式系统开发领域&#xff0c;CAN总线协议已经服务了汽车电子和工业控制三十余年&#xff0c;而它的进化版本UAVCAN正在无人机和机器人领域掀起一场通信革命。当我第一次在四旋翼飞行器项目中尝试将传统CAN节点…...

C语言内存管理常见错误与防御性编程技巧

1. 指针未初始化引发的段错误1.1 结构体成员指针未初始化在C语言中&#xff0c;结构体内部的指针成员并不会自动分配内存。很多初学者会犯这样的错误&#xff1a;struct student {char *name;int score; }stu;int main() {strcpy(stu.name, "Jimy");stu.score 99;re…...

GeekDoc

GeekDoc 中文系列教程是一个庞大且组织良好的技术文档集合&#xff0c;它并非单一教程&#xff0c;而是一个开源文档翻译与整理项目&#xff0c;旨在将优秀的技术文档和教程翻译成中文&#xff0c;并按技术领域进行分类。其内容广泛覆盖了信息技术领域的多个核心方向&#xff0…...

[具身智能-236]:OpenCV ROI:Region of Interest(感兴趣区域)

在 OpenCV 中&#xff0c;ROI 是 Region of Interest&#xff08;感兴趣区域&#xff09;的缩写。简单来说&#xff0c;ROI 就是从图像中切出来的“一块”。在处理图像时&#xff0c;我们往往不需要处理整张图片&#xff08;比如处理人脸时不需要管背景里的树&#xff09;&…...

小程序开发首选免费源码网:全开源生态下的创新加速器

一、全开源免费源码&#xff1a;破解开发难题的“钥匙”1. 降低技术门槛&#xff0c;加速产品落地对于初创团队或个人开发者而言&#xff0c;全开源免费源码的价值在于其“开箱即用”的特性。以GitHub和码云&#xff08;Gitee&#xff09;为例&#xff0c;这两个全球最大的开源…...

Java 反应式编程最佳实践:构建响应式系统

Java 反应式编程最佳实践&#xff1a;构建响应式系统别叫我大神&#xff0c;叫我 Alex 就好。一、引言 大家好&#xff0c;我是 Alex。反应式编程&#xff08;Reactive Programming&#xff09;作为一种编程范式&#xff0c;已经成为构建高并发、低延迟系统的重要手段。Java 生…...