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

洛谷 P6419:[COCI 2014/2015 #1] Kamp ← 换根DP

【题目来源】
https://www.luogu.com.cn/problem/P6419

【题目描述】
一棵树 n 个点,n-1 条边,经过每条边都要花费一定的时间,任意两个点都是联通的。
有 K 个人(分布在 K 个不同的点)要集中到一个点举行聚会。
聚会结束后需要一辆车从举行聚会的这点出发,先让所有人都上车,再把这 K 个人分别送回去。请你回答,对于 i=1~n,如果在第 i 个点举行聚会,司机最少需要多少时间把 K 个人都送回家。

【输入格式】
第一行两个整数 n,K。
接下来 n-1 行,每行三个数 x,y,z 表示 x 到 y 之间有一条需要花费z时间的边。
接下来 K 行,每行一个数,表示 K 个人的分布。

【输出格式】
输出 n 个数。
第 i 行的数表示:如果在第 i 个点举行聚会,司机需要的最少时间。

【输入样例一】
7 2
1 2 4
1 3 1
2 5 1
2 4 2
4 7 3
4 6 2
3
7

【输出样例一】
11
15
10
13
16
15
10

【输入样例二】
5 2
2 5 1
2 4 1
1 2 2
1 3 2
4
5

【输出样例二】
5
3
7
2
2

【数据范围】
对于 50% 的数据,保证n≤2×10^3。
对于 100% 的数据,1≤K≤n<5×10^5,1≤x, y≤n,1≤z≤10^8。

【算法分析】
● 快读:https://blog.csdn.net/hnjzsyjyj/article/details/120131534

int read() { //fast readint x=0,f=1;char c=getchar();while(c<'0' || c>'9') { //!isdigit(c)if(c=='-') f=-1;c=getchar();}while(c>='0' && c<='9') { //isdigit(c)x=x*10+c-'0';c=getchar();}return x*f;
}

本题可以不用“快读”,也可以使用 scanf 完成输入。

● 链式前向星:https://blog.csdn.net/hnjzsyjyj/article/details/139369904

void add(int a,int b,int w) {val[idx]=w,e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}

大佬 yxc 指出“链式前向星”就是“多单链表”,每条单链表基于“头插法”并用 e[]、ne[]、h[] 、val[] 等数组进行模拟创建。其中:
e[idx]:存储序号为 idx 的边的终点值
ne[idx]:存储序号为 idx 的边指向的边的序号(模拟链表指针)‌
h[a]:存储头结点 a 指向的边的序号
val[idx]:存储序号为 idx 的边的权值(可选)

【算法代码】

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int N=5e5+5;int val[N<<1],e[N<<1],ne[N<<1],h[N],idx=1;
void add(int a,int b,int w) {val[idx]=w,e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}bool st[N]; //st[u] indicates whether u is a key point
int siz[N]; //siz[u] represents critical points'num in the subtree of node u
LL f[N]; //f[u] stores total path length for all key points from u
LL g[N]; //g[u] stores double sum of edge weights within the subtree of u
LL up[N]; //up[u] stores the maximum distance from u above it
LL down[N]; //down[u] stores the maximum distance from u under it
LL secd[N]; //secd[u] stores the secondary distance from u under it
int n,k;void dfs(int u,int fa)  {siz[u]=st[u];for(int i=h[u]; i!=-1; i=ne[i]) {int j=e[i];LL w=val[i];if(j==fa) continue;dfs(j,u);siz[u]+=siz[j];if(siz[j]) {g[u]+=g[j]+2*w;if(down[j]+w>down[u]) {secd[u]=down[u];down[u]=down[j]+w;} else if(down[j]+w>secd[u]) {secd[u]=down[j]+w;}}}
}void dfs(int u,int fa,LL w) {if(siz[u]==k) {f[u]=g[u];up[u]=0;} else if(siz[u]==0) {f[u]=f[fa]+2*w;up[u]=max(up[fa],down[fa])+w;} else {f[u]=f[fa];if(down[fa]-down[u]==w) {up[u]=max(up[fa],secd[fa])+w;} else up[u]=max(up[fa],down[fa])+w;}for(int i=h[u]; i!=-1; i=ne[i]) {int v=e[i];LL w=val[i];if(v==fa) continue;dfs(v,u,w);}
}int main() {memset(h,-1,sizeof h);cin>>n>>k;for(int i=1; i<n; i++) {int u,v;LL w;scanf("%d%d%lld",&u,&v,&w);add(u,v,w);add(v,u,w);}for(int i=1; i<=k; i++) {int x;scanf("%d",&x);st[x]=true;}dfs(1,0);dfs(1,0,0);for(int i=1; i<=n; i++) {printf("%lld\n",f[i]-max(up[i],down[i]));}return 0;
}/*
in:
5 2
2 5 1
2 4 1
1 2 2
1 3 2
4
5out:
5
3
7
2
2
*/





【参考文献】
https://mp.weixin.qq.com/s/31CNyn19e8lPO5_eZNbDEg
https://www.luogu.com.cn/problem/solution/P6419
https://mp.weixin.qq.com/s/IgdddPqM4jPcI720P0q3kw
https://mp.weixin.qq.com/s/mRLIdTgHGPpBVuZAfSfe6w
https://mp.weixin.qq.com/s/Ulg9GIl0u2Qgh45FnC9OMg

 

http://www.jsqmd.com/news/269972/

相关文章:

  • 基于人工智能的智能客服系统设计与实现 #计算机毕业设计 毕设 论文 开题报告
  • 基于协同过滤算法的非遗文化交流平台设计与实现 #计算机毕业设计 毕设 论文 开题报告
  • 深度学习毕设项目推荐-基于人工智能python-CNN深度学习识别猫脸
  • 极限科技 Coco AI 荣获 2025 IT168 技术卓越奖 - 创新产品奖
  • 类加载的过程,双亲委派模型以及垃圾回收机制
  • PLC-Recorder如何批量添加曲线?
  • Shader中颜色的加法和乘法的区别
  • 深度学习毕设项目推荐-基于python-CNN卷积神经网络机器学习的柑橘成熟度识别
  • 谈谈我是如何面试技术人员的
  • 自制py功能包解析IMU航迹推算
  • 破解银发学习痛点 兴趣岛 “普惠 + 品质” 模式打造积极老龄化范本
  • flask基于python的在线课程学习平台
  • 肾脏超声图像质量评估与分类系统实现(附Mask R-CNN模型训练)_1
  • 2026人参粉选购指南:从“百草之王”到“品质之选”-神象18年林下山参粉 - 行业调研院
  • java学习笔记1.5
  • flask基于Python的智能购物电商平台商城
  • 深度学习毕设选题推荐:基于python-CNN深度学习识别猫脸
  • java学习笔记1.6
  • 计算机深度学习毕设实战-基于python-CNN深度学习卷神经网络识别猫脸
  • flask基于Python的膳食营养健康系统
  • 编曲伴奏软件有哪些,音乐人分享AI编曲软件助力原创音乐创作
  • 如何高效发布新款,在线看款?
  • flask基于Python的运维管理系统 交换机故障预警处理系统4y5n9i32
  • 深度学习毕设项目:基于python-CNN深度学习识别猫脸
  • 新手必看:渗透测试实战流程 + 工具全攻略(零门槛适配)
  • 深度学习毕设项目:基于python-CNN卷积神经网络的柑橘成熟度识别
  • flask基于大数据的旅游数据分析可视化系统
  • 学霸同款2026 TOP8 AI论文写作软件测评:专科生毕业论文必备神器
  • DTW动态窗口调稳时序对齐
  • flask基于大数据的热门旅游景点推荐系统开题任务书