Description

题库链接

给出一棵含有 \(n\) 个叶子节点的二叉树,对于每个非叶子节点的节点,其与左儿子相连的边为公路,其与右儿子相连的边为铁路。对于每个节点,选择一条与其儿子相连的铁路或公路。对于每个叶子节点 \(u\) ,含有三个参数 \(a,b,c\) ,记 \(u\) 到根节点一共需要经过 \(x\) 条未选择的公路与 \(y\) 条未选择的铁路,其代价为

\[c_u \cdot (a_u + x) \cdot (b_u + y)\]

求最小的总代价和。

\(n \le 20000\) , \(1 \le a_i,b_i \le 60\) , \(1 \le c_i \le 10^9\) ,二叉树深度不超过 \(40\) 。

Solution

传说中的普及 \(dp\) 。

记 \(f_{i,j,k}\) 为 \(i\) 这个节点到根节点路径上一共需要经过 \(j\) 条未选择的公路与 \(k\) 条未选择的铁路,其子树中最小的代价和。

答案就是 \(f_{1,0,0}\) 。

转移就是考虑当前节点选择铁路还是选择公路。

时间复杂度和空间复杂度为 \(O(40^2n)\) 。

Code

#include <bits/stdc++.h>
#define ll long long
#define F(o, i, j) (1ll*c[o]*(i+a[o])*(j+b[o]))
using namespace std;
const int N = 20000+5;int n, a[N], b[N], c[N], ls[N], rs[N];
ll f[N][41][41];void dfs(int o, int dep) {if (o < 0) return;int l = ls[o], r = rs[o];dfs(l, dep+1), dfs(r, dep+1);for (int i = 0; i <= dep; i++)for (int j = 0; j <= dep; j++) {if (l < 0 && r < 0) f[o][i][j] = min(F(-l, i+1, j)+F(-r, i, j), F(-l, i, j)+F(-r, i, j+1));else if (l < 0) f[o][i][j] = min(F(-l, i+1, j)+f[r][i][j], F(-l, i, j)+f[r][i][j+1]);else if (r < 0) f[o][i][j] = min(f[l][i+1][j]+F(-r, i, j), f[l][i][j]+F(-r, i, j+1));else f[o][i][j] = min(f[l][i+1][j]+f[r][i][j], f[l][i][j]+f[r][i][j+1]);}
}
void work() {scanf("%d", &n);memset(f, 127/3, sizeof(f));for (int i = 1; i < n; i++) scanf("%d%d", &ls[i], &rs[i]);for (int i = 1; i <= n; i++) scanf("%d%d%d", &a[i], &b[i], &c[i]);dfs(1, 0);printf("%lld\n", f[1][0][0]);
}
int main() {work(); return 0; }

转载于:https://www.cnblogs.com/NaVi-Awson/p/8904122.html

[HNOI 2018]道路相关推荐

  1. 【HNOI 2018】游戏

    [HNOI 2018]游戏 Problem Description 一次小 \(G\) 和小 \(H\) 在玩寻宝游戏,有 \(n\) 个房间排成一列,编号为 \(1,2,-,n\),相邻房间之间都有 ...

  2. [HNOI 2014]道路堵塞

    Description A国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国 交通部指定了一条从城市1到城市N的路径,并且保证这条路径的长度是所有 ...

  3. HNOI 2018 游记

    前言 为什么我又现在才写一个星期前的游记QAQ,马上都要自己省的省选了还来这里吹水... 还有,这是今年第几次来长沙了?.. 为什么一点紧张感都没有啊,吃枣药丸啊 Day0 上午坐高铁出发,几乎全程补 ...

  4. luogu P4438 [HNOI/AHOI2018]道路

    题目传送门:https://www.luogu.org/problemnew/show/P4438 题意: 有n-1个点为城市,n-1个点为农村,每个城市连出两种道路,一边为公路,一边为铁路.现在每一 ...

  5. 洛谷4438 [HNOI/AHOI2018]道路

    标签:树形DP 题目 题目传送门 题目描述 W 国的交通呈一棵树的形状.W 国一共有n−1n - 1n−1个城市和nnn个乡村,其中城市从111到n−1n - 1n−1 编号,乡村从111到nnn编号 ...

  6. Luogu 4438 [HNOI/AHOI2018]道路

    $dp$. 这道题最关键的是这句话: 跳出思维局限大胆设状态,设$f_{x, i, j}$表示从$x$到根要经过$i$条公路,$j$条铁路的代价,那么对于一个叶子结点,有$f_{x, i, j} = ...

  7. BZOJ5290 洛谷4438:[HNOI/AHOI2018]道路——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5290 https://www.luogu.org/problemnew/show/P4438 的确 ...

  8. P4438 [HNOI/AHOI2018]道路

    这题倒是在树形dp的基础上添加了一些操作,但是做好预处理之后跟模板就差不多了 #include<cstdio> #include<cstring> #define neko 1 ...

  9. 2020.6月做题记录

    长期计划 SAM专题 date:2020.05.21-2020.06.01 基础类: Problem Finished P3804 [模板]后缀自动机 (SAM) √√√ SP1811 LCS - L ...

  10. 其他-私人♂收藏(比赛记录 Mar, 2019)

    OwO 03.03 [USACO19JAN] A. Redistricting 题意:给 \(g\) ,求 \(f(n)\) . \(f(i)=f(j)+[g(i)\ge g(j)],j \in (i ...

最新文章

  1. Velocity文档(3)
  2. 为数字资产交易设计安全的钱包架构
  3. 对于插入和删除数据越频繁的操作 ,单链表较顺序存储结构效率越有优势
  4. c+和python先学哪个比较好-C和Python我该先学什么?
  5. linux nohup 终端断了,linux 后台执行nohup 命令,终端断开无影响
  6. matlab实现粗糙表面_基于分形理论的球头铣削表面形貌研究
  7. AAAI 2021 | 基于对比学习的聚类工作
  8. C# Exception 对象的属性
  9. Hibernate之DetachedCriteria类详解
  10. 上线两个月冲上 App Store 免费榜 Top 2,腾讯会议有什么独到之处?
  11. Win7+keras+tensorflow使用YOLO-v3训练自己的数据集
  12. 微软物联网平台再推新!
  13. 压缩文件后,每次的HASH值(MD5)都不相同的原因
  14. gulp-API介绍
  15. php在html中if,html里的if注释怎么使用
  16. java箱子容积_Java开发笔记(一百三十八)JavaFX的箱子
  17. win10系统,使用Windows照片查看器打开图片
  18. Offer是否具有法律效力
  19. AndroidTV语音搜索
  20. UVA 12235 Help Bubu

热门文章

  1. javascript 动画效果(多物体缓冲运动,多物体透明度变化,匀速移入移出、链式运动、同时运动)
  2. kafka入门1-集群生产消息 报:ERROR Producer connection to localhost:9092 unsuccessful
  3. LayaAir 位图添加遮罩与滤镜
  4. MongoDB 数据库_集合_文档 操作
  5. Spring DeferredResult 实现长轮询
  6. Item 16: Avoid Creating Unnecessary Objects(Effective C#)
  7. 【JAVA】线程安全的案例
  8. 搭建公司内部的NuGet服务器
  9. 面试常见的js简单算法
  10. work of 1/5/2016