P1131 [ZJOI2007]时态同步
传送门
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]时态同步相关推荐
- P1131 [ZJOI2007] 时态同步
P1131 [ZJOI2007] 时态同步 题意: 有一颗树,有一个点是激发器,从这个点开始可以产生一个激励电流,通过导线传向每一个它所连接的节点,经过一个边的花费为w[i],你有一个道具,每用一次可 ...
- ZJOI2007时态同步
描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3-.进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点,都 ...
- 1060. [ZJOI2007]时态同步【树形DP】
Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 字1,2,3-.进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路 ...
- 洛谷 1131 [ZJOI2007] 时态同步
题目描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字1,2,3-.进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路板的任何两个节点 ...
- [luogu1131][bzoj1060][ZJOI2007]时态同步【树形DP】
传送门:https://www.luogu.org/problemnew/show/P1131 题目大意 给你一棵树,每条边有边权,要求增加一些边的边权,使得根节点到每个叶子节点的距离相等,求出最少共 ...
- [ZJOI2007] 时态同步
题面 显然的一个建模是,每个叶子对应一个权值,代表比最晚的叶子早了多久,然后我们要做的就是给每条边赋上值,使得每个叶子到根的路径上的所有边权值和等于叶子的权值. 我们贪心的想一想,必然是离根越近的边赋 ...
- 洛谷 1131 [ZJOI2007]时态同步——树形dp
题目:https://www.luogu.org/problemnew/show/P1131 因为越高,调节一个影响到的越多,所以底下只要把子树间的差异消除了就行了,与其他部分的差异由更高的边调节. ...
- [ZJOI2007] 时态同步(拓扑序)
problem 洛谷链接 solution 结论:使用道具的导线深度越浅越好. 显然,如果有两个终止节点都需要增加 xxx,那么在他们的 lca\text{lca}lca 到根的路径中任意一条边增加 ...
- [ZJOI2007]时态同步 树形DP
题意:给定一棵N个节点的无根树,每条边都有一个权值V,选取其中一个点作为关键点,你可以任意增加某条边的权值,求使得从关键点出发,到任意一个叶子节点的距离都相同所需要增加的权值和. 数据范围: 对于40 ...
最新文章
- 第十四章:springboot 定时任务
- 现行的web开发框架分析
- samba 端口_无需公网IP,易有云支持SAMBA远程连接家里设备
- 通过nginx配置文件抵御攻击
- 青海师范大学云上健身计算机学院,尹君-欢迎光临青海师范大学计算机学院
- acdream 1023 xor按位思考
- NC51189 Mondriaan‘s Dream
- intellij服务器证书不受信任,ssl证书不受信任怎么办?ssl证书不受信任解决方案有什么?...
- 日本显示屏巨头JDI不敌业务压力,宣布接受中方注资...
- 【Python AsciiArt】利用命令行打印出字符图案
- 计算机语言中daly什么意思,计算机组成与体系结构
- spring security 参考 和 例子
- 利用随机矩阵理论(random matrix theory)确定微生物网络构建阈值
- 服务器内存有很多不显示,这里大神多,帮忙看看这个服务器内存是不是真的
- python求一元三次方程的根_【九年级 】知识点8 一元二次方程根的判别式的应用...
- gin框架的环境搭建和热加载
- Thinkpad e450c 如何关闭触控板
- nb信号和4g信号_NB-IoT的同步信号解析
- ld-linux-x86-64.so.2挖矿木马,排查操作记录
- 沃尔玛账号被冻结后如何进行申诉?
热门文章
- redis的info指令详解
- Dubbo入门(一)
- [转]linux系统增加swap大小方法(安装oracle可能需要)
- css3 手机信号,CSS3 无线路由器连接信号动画
- @transaction使自定义注解失效_【完美】SpringBoot中使用注解来实现 Redis 分布式锁...
- db29.7时间格式化为时间到时分秒_python基础系列 | 示例讲解时间模块datetime
- 揭秘:如何为 Kubernetes 实现原地升级
- 2020 云原生技术 7 大领域趋势全预测
- VPGAME 的 Kubernetes 迁移实践
- 独家解读 etcd 3.4版本 |云原生生态周报 Vol. 18