P1131 时态同步【洛谷算法习题】
P1131 时态同步网页链接P1131 时态同步题目描述小 Q 在电子工艺实习课上学习焊接电路板。一块电路板由若干个元件组成我们不妨称之为节点并将其用数字1 , 2 , 3 ⋯ 1,2,3\cdots1,2,3⋯进行标号。电路板的各个节点由若干不相交的导线相连接且对于电路板的任何两个节点都存在且仅存在一条通路通路指连接两个元件的导线序列。在电路板上存在一个特殊的元件称为“激发器”。当激发器工作后产生一个激励电流通过导线传向每一个它所连接的节点。而中间节点接收到激励电流后得到信息并将该激励电流传向与它连接并且尚未接收到激励电流的节点。最终激励电流将到达一些“终止节点”――接收激励电流之后不再转发的节点。激励电流在导线上的传播是需要花费时间的对于每条边e ee激励电流通过它需要的时间为t e t_ete​而节点接收到激励电流后的转发可以认为是在瞬间完成的。现在这块电路板要求每一个“终止节点”同时得到激励电路――即保持时态同步。由于当前的构造并不符合时态同步的要求故需要通过改变连接线的构造。目前小 Q 有一个道具使用一次该道具可以使得激励电流通过某条连接导线的时间增加一个单位。请问小 Q 最少使用多少次道具才可使得所有的“终止节点”时态同步输入格式第一行包含一个正整数N NN表示电路板中节点的个数。第二行包含一个整数S SS为该电路板的激发器的编号。接下来N − 1 N-1N−1行每行三个整数a , b , t a,b,ta,b,t。表示该条导线连接节点a aa与节点b bb且激励电流通过这条导线需要t tt个单位时间。输出格式仅包含一个整数V VV为小 Q 最少使用的道具次数。输入输出样例 #1输入 #13 1 1 2 1 1 3 3输出 #12说明/提示对于40 % 40\%40%的数据1 ≤ N ≤ 1000 1\le N\le 10001≤N≤1000。对于100 % 100\%100%的数据1 ≤ N ≤ 5 × 10 5 1\le N\le 5\times 10^51≤N≤5×105。对于所有的数据1 ≤ t e ≤ 10 6 1\le t_e\le 10^61≤te​≤106。解题思路本题是树形动态规划 贪心的经典问题。给定一棵以激发器S SS为根的树每条边有传播时间t e t_ete​。激励电流从根出发最终到达所有叶子节点终止节点。要求所有叶子节点同时接收到电流即从根到每个叶子的路径总时间相等。我们可以通过消耗道具来增加某条边的时间每次增加1 11单位求最少消耗的道具次数。1. 问题等价转化对于树中的任意节点u uu设其子树中所有叶子节点到u uu的路径最大时间为a [ u ] a[u]a[u]即从u uu出发到达其子树中最远叶子的时间。为了让u uu的所有叶子节点同时到达从u uu到各个子节点v vv的路径时间加上v vv到其叶子的最大时间必须统一为a [ u ] a[u]a[u]。对于每个子节点v vv边( u , v ) (u, v)(u,v)的时间为w ww则从u uu经过v vv到叶子的总时间为a [ v ] w a[v] wa[v]w。若这个值小于a [ u ] a[u]a[u]则必须通过道具将边( u , v ) (u, v)(u,v)的时间增加a [ u ] − ( a [ v ] w ) a[u] - (a[v] w)a[u]−(a[v]w)使得该分支也能达到a [ u ] a[u]a[u]。若a [ v ] w a[v] wa[v]w大于当前的a [ u ] a[u]a[u]则更新a [ u ] a [ v ] w a[u] a[v] wa[u]a[v]w并需要将之前已经处理过的兄弟分支也提升到新的a [ u ] a[u]a[u]通过增加它们对应边的时间。因此在遍历子节点时需要动态维护当前的最大时间并累加调整量。整体思路自底向上 DFS每个节点返回其子树中叶子到该节点的最大时间同时在回溯过程中计算需要增加的时间总和。2. 算法实现建图使用链式前向星存储无向树每条边记录终点to、边权dis和下一个边的指针next。DFS 后序遍历从根节点S SS开始标记已访问。对于每个未访问的子节点v vv递归调用dfs(v)。递归返回后子节点v vv的子树最大时间a[v]已知。当前边( u , v ) (u, v)(u,v)的时间为e[i].dis则从u uu经过v vv到叶子的时间为a[v] e[i].dis。维护当前节点u uu的a[u]初始为0 00和已处理子节点的计数器cnt。若a[v] e[i].dis a[u]说明新的分支更远需要将之前所有已处理的分支都提升到新的高度增加的道具数 (a[v] e[i].dis - a[u]) * cnt。更新a[u] a[v] e[i].discnt。否则当前分支较短需要增加a[u] - a[v] - e[i].dis的道具数cnt。输出答案DFS 结束后累加的总道具数ans即为最少消耗。3. 复杂度分析时间复杂度每个节点和每条边仅被访问一次DFS 为O ( N ) O(N)O(N)。N ≤ 5 × 10 5 N \le 5 \times 10^5N≤5×105完全可行。空间复杂度链式前向星存储边O ( N ) O(N)O(N)递归栈深度最坏O ( N ) O(N)O(N)数组a aa和vis均为O ( N ) O(N)O(N)。总空间O ( N ) O(N)O(N)满足限制。总结本题的核心是让所有叶子节点同时收到信号等价于让每个节点的所有分支到叶子的最大时间一致。通过自底向上的 DFS动态维护当前子树的最大时间并在遇到更远分支时将之前较短的分支统一“拉长”到新高度。每次拉长所需增加的时间即为道具消耗。算法直观且高效是树形贪心的典型应用。代码简要说明链式前向星head[]存头指针e[]存边信息to,next,disnum为边计数。数组a[N]a[u]表示以u uu为根的子树中叶子到u uu的最大路径时间边权之和。数组vis[N]标记节点是否已访问避免重复遍历。dfs(u)函数标记vis[u] 1。初始化cnt 0。遍历u的所有邻边若邻点未访问递归dfs(to)。计算tmp a[to] e[i].dis。若tmp a[u]则ans (tmp - a[u]) * cnt更新a[u] tmp。否则ans a[u] - tmp。cnt。主函数读入N , S N, SN,S建图调用dfs(S)输出ans。代码内容#includebits/stdc.husingnamespacestd;#defineendl\ntypedeflonglongll;typedefunsignedlonglongull;typedefvectorvectorllvvt;typedefpairll,llpll;constll N504561;constll INF1e18;constll M1e610;constll mod1e97;ll head[N*2];ll a[N*2];ll n,m,s,num;ll ans0;boolvis[N];structpoint{ll to,next,dis;}e[N*2];voidadd(ll from,ll to,ll dis){e[num].nexthead[from];e[num].toto;e[num].disdis;head[from]num;}voiddfs(ll u){vis[u]1;ll cnt0;for(ll ihead[u];i!0;ie[i].next){ll toe[i].to;if(!vis[to]){dfs(to);if(a[to]e[i].disa[u]){ans(a[to]e[i].dis-a[u])*cnt;cnt;a[u]a[to]e[i].dis;}else{ansa[u]-a[to]-e[i].dis;cnt;}}}}intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);scanf(%lld%lld,n,s);for(ll i1;in;i){ll x,y,z;scanf(%lld%lld%lld,x,y,z);add(x,y,z);add(y,x,z);}memset(vis,0,sizeof(vis));dfs(s);printf(%lld,ans);return0;}

相关新闻

AI 写作使用规范 —— 正确使用汇写的态度

AI 写作使用规范 —— 正确使用汇写的态度

汇写毕业文章页面底部有个勾选项:"我已阅读并同意《AI 写作使用规范》,内容仅供参考借鉴。" 这句话不是走形式,它提醒你怎么正确使用这个工具。汇写(https://www.huixielunwen.com/tool/graduationThesis)是…

2026/10/5 15:17:46 阅读更多 →
Davinci软件中MCU软件

Davinci软件中MCU软件

目录 Autosar架构BSW层MCU模块介绍 MCU配置芯片时钟树 MCU工作模式 Davinci软件对应MCU配置参数 Autosar架构BSW层MCU模块介绍 Autosar架构中的这个MCU模块用来配置芯片的时钟,以及生成配置等 MCU配置芯片时钟树 对于不同芯片来说都有时钟树,通过芯…

2026/10/5 15:17:46 阅读更多 →
半小时就能用 GPT-6 写出一篇“易发表”的论文,这也太牛了!

半小时就能用 GPT-6 写出一篇“易发表”的论文,这也太牛了!

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 Publish or perish(发表或灭亡)这句略显残酷的话,道出了许多科…

2026/10/5 15:15:45 阅读更多 →

最新新闻

做完歌后怎么快速发布到音乐平台:先补完成度,再选分享或发行

做完歌后怎么快速发布到音乐平台:先补完成度,再选分享或发行

很多人写完一段旋律、录好一版人声,最容易卡在最后一步:歌像是做完了,但又好像还差一点;想马上上传,却临发布才发现封面、歌名、歌词、署名、授权记录都没准备;把上传分享误当成正式发行,后面才…

2026/10/5 16:06:37 阅读更多 →
集团首都公报:武汉市放飞炬人产业引导基金有限责任公司执行董事、财政董事方达炬批准面值总额1千亿欧元的新兴领域法定公积金,支持新兴领域战斗发展。

集团首都公报:武汉市放飞炬人产业引导基金有限责任公司执行董事、财政董事方达炬批准面值总额1千亿欧元的新兴领域法定公积金,支持新兴领域战斗发展。

集团首都公报:武汉市放飞炬人产业引导基金有限责任公司执行董事、财政董事方达炬批准面值总额1千亿欧元的新兴领域法定公积金,支持新兴领域战斗发展。

2026/10/5 16:06:37 阅读更多 →
基于Java的二手数码交易平台毕设全流程:从需求到部署

基于Java的二手数码交易平台毕设全流程:从需求到部署

这段时间在带毕设的过程中,几乎每周都会有人问到同一个题目:“基于Java的二手数码产品交易平台”。这个选题确实火,但火的背后是有道理的——它的业务闭环非常完整,不像图书管理那样单薄,又没有真正的商城系统那么重。…

2026/10/5 16:06:37 阅读更多 →
我的个人介绍:一名专注 AIDC 与科技前沿的编程爱好者

我的个人介绍:一名专注 AIDC 与科技前沿的编程爱好者

1. 关于我 大家好,我是FrankZ,一名热爱编程与科技的技术爱好者。我的职业是一名数据中心行业运营工程师,日常主要针对AIDC领域进行研究,同时也对云计算、大数据等技术保持浓厚兴趣。 在工作之余,我最大的爱好就是钻研科…

2026/10/5 16:06:36 阅读更多 →
AcWing算法学习全攻略:从基础课到周赛实战复盘

AcWing算法学习全攻略:从基础课到周赛实战复盘

1. 为什么我把算法训练阵地选在了AcWing1.1 从刷题网站到系统性课程,差距在哪里说真的,我在接触AcWing之前,和大部分人一样,习惯性打开某个知名刷题网站,按标签刷题。今天碰一道链表,明天碰一道贪心&#x…

2026/10/5 16:06:36 阅读更多 →
Hive数仓分层实战:民宿数据可视化大屏设计与实现

Hive数仓分层实战:民宿数据可视化大屏设计与实现

用Hive做民宿数据可视化这件事,放在毕业设计里其实是有点讲究的。很多同学做大数据毕设,开路就是Hadoop全家桶堆上去,Spark、Flink、Kafka一股脑全上,结果到最后数据是假的,业务是空的,答辩的时候被老师一问…

2026/10/5 16:05:36 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →