[HNOI 2018]道路
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]道路相关推荐
- 【HNOI 2018】游戏
[HNOI 2018]游戏 Problem Description 一次小 \(G\) 和小 \(H\) 在玩寻宝游戏,有 \(n\) 个房间排成一列,编号为 \(1,2,-,n\),相邻房间之间都有 ...
- [HNOI 2014]道路堵塞
Description A国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国 交通部指定了一条从城市1到城市N的路径,并且保证这条路径的长度是所有 ...
- HNOI 2018 游记
前言 为什么我又现在才写一个星期前的游记QAQ,马上都要自己省的省选了还来这里吹水... 还有,这是今年第几次来长沙了?.. 为什么一点紧张感都没有啊,吃枣药丸啊 Day0 上午坐高铁出发,几乎全程补 ...
- luogu P4438 [HNOI/AHOI2018]道路
题目传送门:https://www.luogu.org/problemnew/show/P4438 题意: 有n-1个点为城市,n-1个点为农村,每个城市连出两种道路,一边为公路,一边为铁路.现在每一 ...
- 洛谷4438 [HNOI/AHOI2018]道路
标签:树形DP 题目 题目传送门 题目描述 W 国的交通呈一棵树的形状.W 国一共有n−1n - 1n−1个城市和nnn个乡村,其中城市从111到n−1n - 1n−1 编号,乡村从111到nnn编号 ...
- Luogu 4438 [HNOI/AHOI2018]道路
$dp$. 这道题最关键的是这句话: 跳出思维局限大胆设状态,设$f_{x, i, j}$表示从$x$到根要经过$i$条公路,$j$条铁路的代价,那么对于一个叶子结点,有$f_{x, i, j} = ...
- BZOJ5290 洛谷4438:[HNOI/AHOI2018]道路——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5290 https://www.luogu.org/problemnew/show/P4438 的确 ...
- P4438 [HNOI/AHOI2018]道路
这题倒是在树形dp的基础上添加了一些操作,但是做好预处理之后跟模板就差不多了 #include<cstdio> #include<cstring> #define neko 1 ...
- 2020.6月做题记录
长期计划 SAM专题 date:2020.05.21-2020.06.01 基础类: Problem Finished P3804 [模板]后缀自动机 (SAM) √√√ SP1811 LCS - L ...
- 其他-私人♂收藏(比赛记录 Mar, 2019)
OwO 03.03 [USACO19JAN] A. Redistricting 题意:给 \(g\) ,求 \(f(n)\) . \(f(i)=f(j)+[g(i)\ge g(j)],j \in (i ...
最新文章
- Velocity文档(3)
- 为数字资产交易设计安全的钱包架构
- 对于插入和删除数据越频繁的操作 ,单链表较顺序存储结构效率越有优势
- c+和python先学哪个比较好-C和Python我该先学什么?
- linux nohup 终端断了,linux 后台执行nohup 命令,终端断开无影响
- matlab实现粗糙表面_基于分形理论的球头铣削表面形貌研究
- AAAI 2021 | 基于对比学习的聚类工作
- C# Exception 对象的属性
- Hibernate之DetachedCriteria类详解
- 上线两个月冲上 App Store 免费榜 Top 2,腾讯会议有什么独到之处?
- Win7+keras+tensorflow使用YOLO-v3训练自己的数据集
- 微软物联网平台再推新!
- 压缩文件后,每次的HASH值(MD5)都不相同的原因
- gulp-API介绍
- php在html中if,html里的if注释怎么使用
- java箱子容积_Java开发笔记(一百三十八)JavaFX的箱子
- win10系统,使用Windows照片查看器打开图片
- Offer是否具有法律效力
- AndroidTV语音搜索
- UVA 12235 Help Bubu
热门文章
- javascript 动画效果(多物体缓冲运动,多物体透明度变化,匀速移入移出、链式运动、同时运动)
- kafka入门1-集群生产消息 报:ERROR Producer connection to localhost:9092 unsuccessful
- LayaAir 位图添加遮罩与滤镜
- MongoDB 数据库_集合_文档 操作
- Spring DeferredResult 实现长轮询
- Item 16: Avoid Creating Unnecessary Objects(Effective C#)
- 【JAVA】线程安全的案例
- 搭建公司内部的NuGet服务器
- 面试常见的js简单算法
- work of 1/5/2016