news 2026/4/17 0:51:21

算法竞赛备考冲刺必刷题(C++) | 洛谷 P2052 道路修建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法竞赛备考冲刺必刷题(C++) | 洛谷 P2052 道路修建

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

洛谷:[P2052 NOI2011] 道路修建 - 洛谷

【题目描述】

在 W 星球上有n nn个国家。为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通。但是每个国家的国王都很吝啬,他们只愿意修建恰好n − 1 n - 1n1条双向道路。

每条道路的修建都要付出一定的费用,这个费用等于道路长度乘以道路两端 的国家个数之差的绝对值。例如,在下图中,虚线所示道路两端分别有2 22个、4 44个国家,如果该道路长度为1 11,则费用为1 × ∣ 2 − 4 ∣ = 2 1×|2 - 4|=21×∣24∣=2。图中圆圈里的数字表示国家的编号。

由于国家的数量十分庞大,道路的建造方案有很多种,同时每种方案的修建费用难以用人工计算,国王们决定找人设计一个软件,对于给定的建造方案,计算出所需要的费用。请你帮助国王们设计一个这样的软件。

【输入】

输入的第一行包含一个整数n nn,表示 W 星球上的国家的数量,国家从1 11n nn编号。

接下来n − 1 n - 1n1行描述道路建设情况,其中第i ii行包含三个整数a i a_iaib i b_ibic i c_ici,表示第i ii条双向道路修建在a i a_iaib i b_ibi两个国家之间,长度为c i c_ici

【输出】

输出一个整数,表示修建所有道路所需要的总费用。

【输入样例】

6 1 2 1 1 3 1 1 4 2 6 3 1 5 2 1

【输出样例】

20

【算法标签】

《洛谷 P2052 道路修建》 #树形数据结构# #广度优先搜索BFS# #深度优先搜索DFS# #NOI# #2011#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong// 将int定义为long long类型constintN=1000005,M=N*2;// N: 最大节点数, M: 最大边数(双向边)intn;// 节点数intcnt[N];// cnt[u]: 以u为根的子树大小intans;// 最终答案inth[N];// 邻接表头inte[M];// 边的终点intw[M];// 边的权重intne[M];// 下一条边intidx;// 边计数器// 添加边voidadd(inta,intb,intc){e[idx]=b;// 存储终点w[idx]=c;// 存储边权ne[idx]=h[a];// 插入到链表头部h[a]=idx++;// 更新头指针}// 第一次DFS:计算每个节点的子树大小voiddfs(intu,intfa){cnt[u]=1;// 初始化,包含自己// 遍历所有邻接点for(inti=h[u];i!=-1;i=ne[i]){intj=e[i];// 子节点if(j==fa)continue;// 跳过父节点dfs(j,u);// 递归处理子节点cnt[u]+=cnt[j];// 累加子树的节点数}}// 第二次DFS:计算总贡献voiddfs2(intu,intfa){// 遍历所有邻接点for(inti=h[u];i!=-1;i=ne[i]){intj=e[i];// 子节点if(j==fa)continue;// 跳过父节点// 计算边(u, j)的贡献// cnt[j]: 子树j的节点数// n - cnt[j]: 另一部分的节点数// 两部分的差值乘以边权ans+=w[i]*abs(cnt[j]-(n-cnt[j]));// 递归处理子节点dfs2(j,u);}}signedmain()// 因为使用了#define int long long,所以用signed main{// 初始化邻接表memset(h,-1,sizeof(h));// 输入节点数cin>>n;// 输入n-1条边for(inti=1;i<n;i++){intu,v,w;// 使用scanf加速输入scanf("%d%d%d",&u,&v,&w);// 添加双向边add(u,v,w);add(v,u,w);}// 第一次DFS:计算子树大小dfs(1,0);// 第二次DFS:计算总贡献dfs2(1,0);// 输出结果cout<<ans<<endl;return0;}

【运行结果】

6 1 2 1 1 3 1 1 4 2 6 3 1 5 2 1 20
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 15:43:33

低成本GPU方案:12GB显存跑通Image-to-Video全流程

低成本GPU方案&#xff1a;12GB显存跑通Image-to-Video全流程 引言&#xff1a;为何12GB显存成为图像转视频的“甜点级”配置&#xff1f; 随着多模态生成模型的快速发展&#xff0c;Image-to-Video&#xff08;I2V&#xff09; 技术正从实验室走向实际应用。然而&#xff0c;主…

作者头像 李华
网站建设 2026/4/12 18:05:24

RSI顶底通达信公式 副图 源码附图

{}WWWFXJGSWCOM:VOL/((HIGH-LOW)*2-ABS(CLOSE-OPEN)); 风险中值:50,COLOR0099FF,DOTLINE; 机会:IF(风险系数<10,风险系数,DRAWNULL),COLORRED; 风险:IF(风险系数>90,风险系数,DRAWNULL),COLORGREEN; ......

作者头像 李华
网站建设 2026/4/17 4:23:08

Sambert-HifiGan在虚拟偶像中的应用:打造数字人语音

Sambert-HifiGan在虚拟偶像中的应用&#xff1a;打造数字人语音 引言&#xff1a;让数字人“声”动起来——中文多情感语音合成的现实需求 随着虚拟偶像、AI主播、智能客服等数字人应用场景的快速普及&#xff0c;用户对语音交互的真实感与情感表达提出了更高要求。传统的TTS&a…

作者头像 李华
网站建设 2026/4/14 0:19:20

用Sambert-HifiGan为在线课程添加多语言配音

用Sambert-HifiGan为在线课程添加多语言配音 引言&#xff1a;语音合成在教育场景中的价值跃迁 随着在线教育的蓬勃发展&#xff0c;学习者对内容呈现形式的要求日益提升。传统的单一声线、机械朗读式配音已难以满足多样化、情感化和本地化的教学需求。尤其在跨区域、多语种的课…

作者头像 李华
网站建设 2026/4/16 20:35:16

百度编辑器如何处理Word图片粘贴时的自动压缩与优化?

一个Java程序员的UEditorWord导入血泪史&#xff1a;从抓狂到真香 第一章&#xff1a;需求降临——老板的"简单"要求 "小张啊&#xff0c;咱们后台编辑器得加个功能&#xff0c;用户要能直接导入Word文档&#xff0c;格式和图片都不能丢啊&#xff01;"老…

作者头像 李华
网站建设 2026/4/16 19:42:40

openspeedy加速方案能否提升I2V生成效率?

openspeedy加速方案能否提升I2V生成效率&#xff1f; 背景与问题提出 在当前AIGC&#xff08;人工智能生成内容&#xff09;快速发展的背景下&#xff0c;Image-to-Video&#xff08;I2V&#xff09;图像转视频技术正成为创意生产、影视预演和数字营销的重要工具。由“科哥”主…

作者头像 李华