博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[树形DP]Luogu P1131 [ZJOI2007]时态同步
阅读量:6153 次
发布时间:2019-06-21

本文共 1005 字,大约阅读时间需要 3 分钟。

https://www.luogu.org/problemnew/show/P1131

分析

我们设t[i]为以i为根的子树中需要最久达到的点所需的时间

那么我们容易用一次DFS预处理出来,再DFS记录深入到当前点已经加过k次,ans=Σ(t[rt]-t[u]-k),k=t[rt]-t[u]

 

#include 
#include
using namespace std;const int N=5e5+10;struct Graph { int v,nx,w;}g[2*N];int cnt,list[N];int n,rt;int tme[N],mx;long long ans;void Add(int u,int v,int w) { g[++cnt]=(Graph){v,list[u],w};list[u]=cnt; g[++cnt]=(Graph){u,list[v],w};list[v]=cnt;}void DFS(int u,int fa) { for (int i=list[u];i;i=g[i].nx) if (g[i].v!=fa) { tme[g[i].v]=tme[u]+g[i].w; DFS(g[i].v,u); } for (int i=list[u];i;i=g[i].nx) if (g[i].v!=fa) tme[u]=max(tme[u],tme[g[i].v]);}void DFS(int u,int fa,int t) { for (int i=list[u];i;i=g[i].nx) if (g[i].v!=fa) { ans+=mx-tme[g[i].v]-t; DFS(g[i].v,u,mx-tme[g[i].v]); }}int main() { scanf("%d%d",&n,&rt); for (int i=1,u,v,w;i
View Code

 

转载于:https://www.cnblogs.com/mastervan/p/10981274.html

你可能感兴趣的文章
hive升级注意事项
查看>>
C#---属性和字段
查看>>
COGS1533.[HNOI2002]营业额统计
查看>>
How to reset XiaoMi bluetooth headphone Youth edition.
查看>>
SEOer 的生涯正式开始
查看>>
CodeForces 348D Turtles(LGV定理)题解
查看>>
返流性食管炎的治疗
查看>>
argumrnts
查看>>
java常用的7大排序算法汇总
查看>>
动归熟手题单
查看>>
压缩算法
查看>>
Http协议详解版本一
查看>>
vuex
查看>>
完整学习git四git对象
查看>>
Bzoj1101: [POI2007]Zap 莫比乌斯反演+整除分块
查看>>
innerHTML outerHTML innerText value 区别
查看>>
ALV打印不显示打印界面的问题
查看>>
octopress github 换电脑 使用
查看>>
angular2 学习笔记 ( animation 动画 )
查看>>
1、 Shiro框架:认证,授权(验权 2. Shiro框架实现权限控制方式:
查看>>