传送门

DP

题目讲得很清楚"对于电路板的任何两个节点,都存在且仅存在一条通路".

所以电路板是一颗树

题目要求叶子节点时态一致

如果从根开始枚举时间肯定超时

考虑反过来

从叶子节点开始考虑时间

容易注意到

对于一个子树的根 root 来说

不管上面用了多久把信息传下来

要让它的儿子收到信息的时间相同

必须让 root 到各个儿子的距离相等

如果一个子树已经调好了

那么以后也不会再去更改

无后效性

所以考虑DP

对于一个非叶子节点,要让它到各个儿子的距离相等

那么显然最节省的方案就是

让它到各个儿子的距离改成它最远的儿子的距离

所以得出状态转移方程:

设f[ i ]为 当以 i 为根的子树的时态同步时,从它的叶子到 i 需要的时间

f[ i ]=max(f[ i ],f[ u ]+dis[ i ][ u ]) ( u为 i 的儿子,dis[ i ][ u ]为 i 到 u 的距离)

而答案就在更新f[ i ] 的时候顺便累加一下就好了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;
}
const int N=500007;
vector <int> v[N],g[N]; //用vector 存图,反正不会超时
int n,rt;//rt 为根节点
long long f[N],ans;//f如上所述,ans存答案
inline void dfs(int x,int fa)//fa 存 x 的父亲
{int len=v[x].size();for(int i=0;i<len;i++){int u=v[x][i];if(u==fa) continue;//如果是父亲就跳过dfs(u,x);//否则先更新儿子节点f[x]=max(f[x],f[u]+g[x][i]);//更新当前节点}for(int i=0;i<len;i++){int u=v[x][i];if(u==fa) continue;//如果是父亲就跳过ans+=(f[x]-f[u]-g[x][i]);//累加答案}
}
int main()
{int a,b,c;cin>>n>>rt;for(int i=1;i<n;i++){a=read(); b=read(); c=read();v[a].push_back(b); g[a].push_back(c);v[b].push_back(a); g[b].push_back(c);}//存边dfs(rt,rt);cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/LLTYYC/p/9523875.html

P1131 [ZJOI2007]时态同步相关推荐

  1. P1131 [ZJOI2007] 时态同步

    P1131 [ZJOI2007] 时态同步 题意: 有一颗树,有一个点是激发器,从这个点开始可以产生一个激励电流,通过导线传向每一个它所连接的节点,经过一个边的花费为w[i],你有一个道具,每用一次可 ...

  2. ZJOI2007时态同步

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

  3. 1060. [ZJOI2007]时态同步【树形DP】

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

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

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

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

    传送门:https://www.luogu.org/problemnew/show/P1131 题目大意 给你一棵树,每条边有边权,要求增加一些边的边权,使得根节点到每个叶子节点的距离相等,求出最少共 ...

  6. [ZJOI2007] 时态同步

    题面 显然的一个建模是,每个叶子对应一个权值,代表比最晚的叶子早了多久,然后我们要做的就是给每条边赋上值,使得每个叶子到根的路径上的所有边权值和等于叶子的权值. 我们贪心的想一想,必然是离根越近的边赋 ...

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

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

  8. [ZJOI2007] 时态同步(拓扑序)

    problem 洛谷链接 solution 结论:使用道具的导线深度越浅越好. 显然,如果有两个终止节点都需要增加 xxx,那么在他们的 lca\text{lca}lca 到根的路径中任意一条边增加 ...

  9. [ZJOI2007]时态同步 树形DP

    题意:给定一棵N个节点的无根树,每条边都有一个权值V,选取其中一个点作为关键点,你可以任意增加某条边的权值,求使得从关键点出发,到任意一个叶子节点的距离都相同所需要增加的权值和. 数据范围: 对于40 ...

最新文章

  1. 第十四章:springboot 定时任务
  2. 现行的web开发框架分析
  3. samba 端口_无需公网IP,易有云支持SAMBA远程连接家里设备
  4. 通过nginx配置文件抵御攻击
  5. 青海师范大学云上健身计算机学院,尹君-欢迎光临青海师范大学计算机学院
  6. acdream 1023 xor按位思考
  7. NC51189 Mondriaan‘s Dream
  8. intellij服务器证书不受信任,ssl证书不受信任怎么办?ssl证书不受信任解决方案有什么?...
  9. 日本显示屏巨头JDI不敌业务压力,宣布接受中方注资...
  10. 【Python AsciiArt】利用命令行打印出字符图案
  11. 计算机语言中daly什么意思,计算机组成与体系结构
  12. spring security 参考 和 例子
  13. 利用随机矩阵理论(random matrix theory)确定微生物网络构建阈值
  14. 服务器内存有很多不显示,这里大神多,帮忙看看这个服务器内存是不是真的
  15. python求一元三次方程的根_【九年级 】知识点8 一元二次方程根的判别式的应用...
  16. gin框架的环境搭建和热加载
  17. Thinkpad e450c 如何关闭触控板
  18. nb信号和4g信号_NB-IoT的同步信号解析
  19. ld-linux-x86-64.so.2挖矿木马,排查操作记录
  20. 沃尔玛账号被冻结后如何进行申诉?

热门文章

  1. redis的info指令详解
  2. Dubbo入门(一)
  3. [转]linux系统增加swap大小方法(安装oracle可能需要)
  4. css3 手机信号,CSS3 无线路由器连接信号动画
  5. @transaction使自定义注解失效_【完美】SpringBoot中使用注解来实现 Redis 分布式锁...
  6. db29.7时间格式化为时间到时分秒_python基础系列 | 示例讲解时间模块datetime
  7. 揭秘:如何为 Kubernetes 实现原地升级
  8. 2020 云原生技术 7 大领域趋势全预测
  9. VPGAME 的 Kubernetes 迁移实践
  10. 独家解读 etcd 3.4版本 |云原生生态周报 Vol. 18