题目描述



分析

我们从根节点开始搜索,搜索到叶子节点,回溯的时候进行维护

先维护节点的所有子节点到该节点最大边权(边权为叶子节点到同时到达它所需要时间)

然后维护答案,答案为最大边权减去所有到子节点的边权。

然后维护父节点的边权,父节点边权为该节点子节点的 最大边权+父节点到该节点的时间。

然后就回溯,重复操作,到根节点为止。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e6+5;
typedef long long ll;
struct asd{
int from,to,next;
ll val;
}b[maxn];
int head[maxn],tot=1;
void ad(int aa,int bb,ll cc){
b[tot].from=aa;
b[tot].to=bb;
b[tot].next=head[aa];
b[tot].val=cc;
head[aa]=tot++;
}
ll f[maxn];
ll sum[maxn],ans[maxn];
ll siz[maxn];
void dfs(int now,int fa){
for(int i=head[now];i!=-1;i=b[i].next){
int u=b[i].to;
if(u==fa) continue;
dfs(u,now);
sum[now]=max(sum[now],b[i].val+sum[u]);
}
}//第一遍dfs求出修改后m节点到叶子节点的权值之和
void dfs2(int now,int fa){
for(int i=head[now];i!=-1;i=b[i].next){
int u=b[i].to;
if(u==fa) continue;
f[now]+=sum[now]-sum[u]-b[i].val;
dfs2(u,now);
f[now]+=f[u];
}
}//第二遍dfs求出修改以m节点为根的子树所需要的最小花费
int main(){
memset(head,-1,sizeof(head));
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<n;i++){
int aa,bb;
ll cc;
scanf("%d%d%lld",&aa,&bb,&cc);
ad(aa,bb,cc);
ad(bb,aa,cc);
}
dfs(m,0);
dfs2(m,0);
printf("%lld\n",f[m]);
return 0;
}

洛谷 P1131 [ZJOI2007]时态同步 树形DP的更多相关文章

  1. 洛谷 1131 [ZJOI2007]时态同步——树形dp

    题目:https://www.luogu.org/problemnew/show/P1131 因为越高,调节一个影响到的越多,所以底下只要把子树间的差异消除了就行了,与其他部分的差异由更高的边调节. ...

  2. 洛谷 P1131 [ZJOI2007]时态同步

    P1131 [ZJOI2007]时态同步   题目描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号.电路板的各个节点由若干 ...

  3. [洛谷P1131][ZJOI2007]时态同步

    题目大意:给你一棵树,每条边有边权,要求增加一些边的边权,使得根节点到每个叶子节点的距离相等,求出最少共增加多少边权. 题解:树形$DP$,对于每个点,如果它到它的子树中的叶子节点距离不同,一定要在这 ...

  4. Luogu P1131 [ZJOI2007]时态同步 树形DP

    要自下向上调整,尽可能用一个道具修改多个: 搜的时候记录叶节点的最大深度,减一下就好了. #include<cstdio> #include<iostream> #includ ...

  5. 【BZOJ1060】[ZJOI2007]时态同步 树形DP

    [BZOJ1060][ZJOI2007]时态同步 Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3-.进行标号.电路 ...

  6. BZOJ 1060: [ZJOI2007]时态同步( 树形dp )

    坑爹...数据是错的..详见discuss  http://www.lydsy.com/JudgeOnline/wttl/wttl.php?pid=1060 先求根到叶子的距离最大值x, 然后把所有叶 ...

  7. BZOJ1060或洛谷1131 [ZJOI2007]时态同步

    BZOJ原题链接 洛谷原题链接 看上去就觉得是一道树形\(\mathtt{DP}\),不过到头来我发现我写了一个贪心.. 显然对越靠近根(记为\(r\))的边进行加权贡献越大,且同步的时间显然是从根到 ...

  8. [BZOJ1060][ZJOI2007]时态同步 树形dp

    Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路 ...

  9. 洛谷 1131 [ZJOI2007] 时态同步

    题目描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点 ...

随机推荐

  1. (三)SQLMap工具-使用选项的操作命令&功能

    目录结构 1.Options(选项) 2.Target(目标) 3.Request(请求) 4.Optimization(优化) 5.Injection(注入) 6.Detection(检测) 7.T ...

  2. cocos2dx 实现遮罩

    参考博文:http://blog.csdn.net/myarrow/article/details/19913653 参考博文:http://blog.csdn.net/song_hui_xiang/ ...

  3. 编译e2fsprogs-1.40.2

    1.解压源码 tar zxvf e2fsprogs-1.40.2.tar.gz 2.配置 ./configure --enable-elf-shlibs --host=arm-linux --with ...

  4. 利用BeanMap进行对象与Map的相互转换

    javabean与map的转换有很多种方式,比如: 1.通过ObjectMapper先将bean转换为json,再将json转换为map,但是这种方法比较绕,且效率很低,经测试,循环转换10000个b ...

  5. 2个线程A-B-A-B或者B-A-B-A循环输出

    代码: /** * 两个线程循环打印输出a-b-a-b */ public class AandBforTOthread { private static Object o = new Object( ...

  6. mtail 调试

    mtail 调式 mtail 不会采集当前accesslog 内容以前的内容,只有当你启动mtail后,去访问你的监控tomcat,有新的access 日志刷入localhost_access_log ...

  7. 通过char与varchar的区别,学习可变长的字符类型

    转自http://www.uphtm.com/database/232.html 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  8. PIP设置镜像源

    PIP设置镜像源 pip安装Python包时候,默认是国外的下载源,速度太慢,本文介绍几种设置pip国内镜像源的方法 镜像源 阿里云 http://mirrors.aliyun.com/pypi/si ...

  9. Vue错误汇总

    1.Vue导入js后没反应{{msg}}仍是{{msg}} 错误原因:js里写错了,或者没new一个Vue html页面: 解决方法:代码加入 new

  10. SpringMVC 学习笔记(六)拦截器

    5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器) 类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. ...