问题:
有一个树形结构的电路板,其中有一个激发器(根节点),电流从根节点出发,沿着树边传播到所有叶子节点(终止节点)。每条边有一个传播时间,我们需要通过增加某些边的传播时间,使得所有叶子节点同时接收到电流。
解法:
贪心:
从叶子节点开始向上处理
对于每个节点,计算从其到其子树中叶子节点的最大路径长度
对于节点的每个子节点,将它们的路径长度补齐到这个最大值
向上传递时,加上当前节点到父节点的边权
算法:
使用BFS或DFS建立树结构(因为N很大,需要避免递归深度过大)
通过拓扑排序(从叶子到根)处理节点
对于每个节点:
找到所有子节点中的最大f[y]+w(即最大路径长度)
将所有子节点的路径长度补齐到这个最大值
当前节点的f[x]=这个最大值
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=500010;
int h[N],v[N<<1],nxt[N<<1],cnt,d[N<<1];
long long res,f[N];
int q[N],fa[N];
void add(int x,int y,int z)
{
v[++cnt]=y;
d[cnt]=z;
nxt[cnt]=h[x];
h[x]=cnt;
}
int main()
{
int n,st;
scanf("%d%d",&n,&st);
for(int i=1;i<n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
int l=0,r=0;
q[0]=st;
fa[st]=0;
while(l<=r)
{
int x=q[l++];
for(int i=h[x];i;i=nxt[i])
{
int y=v[i];
if(y==fa[x]) continue;
fa[y]=x;
q[++r]=y;
}
}
for(int i=r;i>=0;i--)
{
int x=q[i];
long long mx=0;
for(int j=h[x];j;j=nxt[j])
{
int y=v[j],w=d[j];
if(y==fa[x]) continue;
f[x]=max(f[x],f[y]+w);
}
for(int j=h[x];j;j=nxt[j])
{
int y=v[j],w=d[j];
if(y==fa[x]) continue;
res+=f[x]-(f[y]+w);
}
}
printf("%lld\n",res);
return 0;
}
P1131题解
张小明
前端开发工程师
【计算机毕设推荐】基于Spark+Python的饮食风味数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
✍✍计算机毕设指导师** ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡有什么问题可以…
小米AI音箱固件兼容性终极指南:告别配置失败,让xiaogpt完美运行
你是否曾经满怀期待地配置好xiaogpt,却发现小米AI音箱毫无反应?或者升级固件后,原本流畅的对话突然中断?别担心,你不是一个人!通过本文的深度测试与分析,我们将帮你彻底解决这些兼容性难题。 【…
Cloudpods多云管理平台:从零开始的完整部署与使用指南
Cloudpods多云管理平台:从零开始的完整部署与使用指南 【免费下载链接】cloudpods 开源、云原生的多云管理及混合云融合平台 项目地址: https://gitcode.com/yunionio/cloudpods Cloudpods是一款开源、云原生的多云管理及混合云融合平台,能够帮助…
VFlow高性能流处理平台终极部署指南
项目快速概览 【免费下载链接】vflow 项目地址: https://gitcode.com/gh_mirrors/vfl/vflow VFlow是由EdgeCast开发的一款高性能、可扩展且可靠的开源流处理平台,专为IPFIX、sFlow和Netflow数据收集而设计。这个基于纯Golang构建的解决方案能够高效处理网络…
如何判断高低温交变湿热试验箱品牌的质量是否过硬?
在环境可靠性测试领域,高低温交变湿热试验箱是评估产品耐候性与稳定性的关键设备。选购一台质量过硬的试验箱,不仅关乎测试数据的准确性,更直接影响研发进度与产品质量。面对市场上众多的品牌,用户需从核心技术、制造工艺、长期稳…
编程竞赛备考:如何利用考级检验基础能力?
编程竞赛备考:如何利用考级检验基础能力? 学习层次划分 从专业角度看,青少年编程学习和考级大致可以划分为三个层次。 第一层:兴趣启蒙与基础认知帮助孩子在信息素养、图形化编程等环节建立计算思维,夯实基础概念,避免一开始就被抽象语法劝退。 第二层:系统进阶与能力…