P13555 【MX-X15-T2】系绳绳
记录162#includebits/stdc.h // 引入万能头文件包含所有常用的标准库 using namespace std; // 使用标准命名空间 int main(){ // 主函数入口 ios::sync_with_stdio(false); // 关闭cin与stdio的同步加快输入输出速度 cin.tie(0); // 解除cin与cout的绑定进一步加快IO效率 int t; // 定义变量t表示数据的组数 cint; // 输入数据组数t while(t--){ // 循环处理每一组测试数据 int n; // 定义变量n表示当前这组数据树的节点总数 cinn; // 输入节点数n if(n1){ // 特判如果只有一个节点不需要任何操作 cout0\n; // 输出0 continue; // 跳过当前循环处理下一组数据 } vectorint degree(n1,0); // 定义度数组用vector动态分配degree[i]记录节点i的度数初始化为0 for(int i1;in-1;i){ // 循环n-1次读入树的每一条边 int u, v; // 定义临时变量u和v代表一条边连接的两个节点 cinuv; // 输入一条边的两个端点 degree[u]; // 节点u的度数加1 degree[v]; // 节点v的度数加1 } int leaf_count0; // 定义变量leaf_count用来统计叶子节点度数为1的节点的总数 for(int i1;in;i){ // 遍历从1到n的每一个节点 if(degree[i]1){ // 如果当前节点的度数为1说明它是叶子节点 leaf_count; // 叶子节点计数加1 } } // 根据结论最少操作次数 叶子节点数量 - 1 coutleaf_count-1\n; // 输出最终答案 } return 0; // 主函数正常结束返回0 }题目传送门https://www.luogu.com.cn/problem/P13555前言我是一名专注信奥赛GESP、CSP-J/S的教练。如果你觉得这篇题解对你有帮助欢迎点击关注我的CSDN账号我会持续更新高质量算法解析。我深知算法思维的构建远比单纯通过题目更重要本系列题解不局限于AC代码的堆砌而是致力于拆解题目背后的逻辑链条与核心知识点备赛路上若遇瓶颈欢迎随时评论或私信我将甄选典型疑难问题通过视频讲解或撰写专项文章的形式为你提供深度答疑。核心解题思路这道题是一道非常经典的图论树的性质与数学推导问题。问题转化树与叶子节点题目给出了一个包含 n 个节点的树。每次操作选择一个根节点会在所有祖先-后代节点对之间连边。如果我们把树看作一个图那么一次操作实际上是把以该节点为根时树上所有的“祖先-后代”路径都覆盖上了绳子。通过数学推导和观察可以发现要让树上所有的节点对都被覆盖最少需要的操作次数与树的叶子节点数量直接相关。算法设计统计叶子节点在树中叶子节点是指度数为 1 的节点只有一个邻居。根据本题的结论最少操作次数等于叶子节点的数量减去 1。因此我们的算法非常简单读入所有的边统计每个节点的度数最后数一数度数为 1 的节点有多少个将其减 1 输出即可。代码分块详细解释1. 头文件、IO 优化与变量定义#includebits/stdc.h // 引入万能头文件包含所有常用的标准库 using namespace std; // 使用标准命名空间 int main(){ // 主函数入口 ios::sync_with_stdio(false); // 关闭cin与stdio的同步加快输入输出速度 cin.tie(0); // 解除cin与cout的绑定进一步加快IO效率 int t; // 定义变量t表示数据的组数 cint; // 输入数据组数t详细分析由于题目中数据组数 tt 最大可达 2×10^4 总节点数 ∑n≤2×10^5 输入输出量较大因此必须加上ios::sync_with_stdio(false);和cin.tie(0);进行 IO 加速防止程序因 IO 瓶颈超时。2. 边界处理与树的读入while(t--){ // 循环处理每一组测试数据 int n; // 定义变量n表示当前这组数据树的节点总数 cinn; // 输入节点数n if(n1){ // 特判如果只有一个节点不需要任何操作 cout0\n; // 输出0 continue; // 跳过当前循环处理下一组数据 } vectorint degree(n1,0); // 定义度数组用vector动态分配degree[i]记录节点i的度数初始化为0 for(int i1;in-1;i){ // 循环n-1次读入树的每一条边 int u, v; // 定义临时变量u和v代表一条边连接的两个节点 cinuv; // 输入一条边的两个端点 degree[u]; // 节点u的度数加1 degree[v]; // 节点v的度数加1 }详细分析边界特判当 n1n1 时树上只有一个节点不存在任何节点对因此不需要操作直接输出 0。度数统计使用vectorint degree(n1, 0)动态分配度数组节省内存。对于树来说有 n 个节点就有 n−1n−1 条边。每读入一条边 (u,v) 就将 u 和 v 的度数各加 1。3. 核心逻辑统计叶子节点与输出答案int leaf_count0; // 定义变量leaf_count用来统计叶子节点度数为1的节点的总数 for(int i1;in;i){ // 遍历从1到n的每一个节点 if(degree[i]1){ // 如果当前节点的度数为1说明它是叶子节点 leaf_count; // 叶子节点计数加1 } } // 根据结论最少操作次数 叶子节点数量 - 1 coutleaf_count-1\n; // 输出最终答案 } return 0; // 主函数正常结束 }详细分析叶子节点判定遍历所有节点如果degree[i] 1说明该节点只与一个节点相连即为叶子节点。输出答案根据图论推导最少操作次数为leaf_count - 1。例如样例 1 中叶子节点为 1 和 3共 2 个答案为 2−11 样例 2 中叶子节点为 2, 3, 5共 3 个答案为 3−12。核心逻辑总结表代码模块核心变量/操作精炼作用解决的痛点IO 加速ios::sync_with_stdio(false)关闭 C 与 C 标准流同步应对 2×1052×105 级别的大量输入输出防止超时边界特判if(n1)单独处理只有一个节点的情况避免 n1n1 时叶子节点数为 1导致输出 0 的逻辑错误度数统计degree[u]; degree[v]读入边时同步更新两端点的度数无需真正建树仅通过度数即可获取树的结构信息叶子节点统计if(degree[i]1)遍历所有节点统计度数为 1 的节点数找到了决定最少操作次数的关键变量公式输出cout leaf_count-1应用推导出的数学结论将复杂的图论问题转化为简单的数学计算时间复杂度仅为 O(n)O(n)

相关新闻

Linux 驱动-i2c工具篇

Linux 驱动-i2c工具篇

提示:Linux 驱动-i2c工具篇 文章目录前言一、资料参考二、开发工具下载-安装下载方式安装安装-使用思路下载对应版本-准备安装包二、工具使用i2cdetect基础原理(1) i2cdetect -V: 输出版本信息(2) i2cdetect -l: 列出所…

2026/9/28 10:10:39 阅读更多 →
从比特币到Web3:一场关于信任的“操作系统”升级

从比特币到Web3:一场关于信任的“操作系统”升级

从比特币到Web3:一场关于信任的“操作系统”升级 磐链科技:2008年,当中本聪在密码朋克邮件列表中抛出那篇著名的白皮书时,恐怕连他自己也未曾预料到,这项旨在解决“双花问题”的技术实验,会在随后的十几年里…

2026/9/27 15:57:26 阅读更多 →
VC++中创建多级目录的完整实现与最佳实践

VC++中创建多级目录的完整实现与最佳实践

1. 项目概述:为什么“创建多级目录”是VC开发者的基本功 在Windows平台下用VC做开发,无论是写一个需要保存日志的小工具,还是一个需要管理用户配置文件的桌面应用,甚至是开发一个游戏引擎来组织资源文件,你几乎都绕不开…

2026/9/26 23:20:27 阅读更多 →

最新新闻

Jev 结构化决策模型:TypeSafe AI 与 RLCD 实战指南

Jev 结构化决策模型:TypeSafe AI 与 RLCD 实战指南

1. 从“不说话”的模型说起:Jev 到底在解决什么问题第一次看到“Jev”这个名字,加上“前 OpenAI 研究员做的‘不说话’模型”这个描述,我脑子里冒出来的第一个疑问是:一个不输出自然语言的模型,到底能拿来干什么&#…

2026/9/30 16:23:39 阅读更多 →
C++控制台小游戏开发:零依赖320行实现迷宫逃脱

C++控制台小游戏开发:零依赖320行实现迷宫逃脱

1. 这个“3天编好的C小游戏”到底是什么?——从标题拆解真实项目边界看到标题里“c小游戏(免费复制)(3天编好的,希望各位3连)”,第一反应不是点开,而是先问自己:这到底是…

2026/9/30 16:23:39 阅读更多 →
异步加载原理与性能优化:从FCP到INP的指标解读

异步加载原理与性能优化:从FCP到INP的指标解读

看到“异步加载”这四个字,大多数人第一反应是给 script 加个 async 属性,或者把路由改成懒加载。但如果你只做到这一步,说明还停留在工具层面。真正理解异步加载,要回答的是:浏览器在加载页面时为什么必须同步&#x…

2026/9/30 16:23:39 阅读更多 →
OpenCode 模型接入实战:免费池、OpenRouter 与本地 Ollama 配置指南

OpenCode 模型接入实战:免费池、OpenRouter 与本地 Ollama 配置指南

OpenCode 这个工具最近在开发者圈子里讨论度很高,但真正让大多数人卡住的不是它怎么装,而是装完之后怎么让它跑起来不花钱。官方免费池有使用限制,OpenRouter 的免费模型额度规则经常变,本地 Ollama 又涉及下载和配置的一堆坑。我…

2026/9/30 16:23:39 阅读更多 →
Ubuntu 20.04下NVIDIA驱动、CUDA、CUDNN与NVENC配置实战

Ubuntu 20.04下NVIDIA驱动、CUDA、CUDNN与NVENC配置实战

先把结论放在前面:这套环境配置本身不难,难的是很多人把“驱动、CUDA Toolkit、CUDNN、NVENC”这四层东西混在一起,导致出了问题根本不知道该查哪一层。这篇文章我会从头到尾走一遍 Ubuntu 20.04 下的部署流程,覆盖 NVIDIA 显卡驱…

2026/9/30 16:23:39 阅读更多 →
大模型推理优化实战:从PyTorch到TensorRT的四层工程方法论

大模型推理优化实战:从PyTorch到TensorRT的四层工程方法论

1. 项目概述:Model-Optimizer 不是工具名,而是一套可落地的模型推理加速工程方法论“Model-Optimizer”这个标题乍看像某个开源工具或商业软件,但结合NVIDIA、TensorRT-LLM、vLLM、PT文件转换TensorRT等热搜词,它实际指向的是一类…

2026/9/30 16:22:32 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/30 15:27:04 阅读更多 →