「HNOI/AHOI2018」道路
传送门
Luogu
解题思路
考虑树形 \(\text{DP}\)
设状态 \(dp[u][i][j]\) 表示从首都走到点 \(u\) ,经过 \(i\) 条公路,\(j\) 条铁路的最小不方便值。
对于叶子节点也就是村庄,直接初始化,对于非叶子节点也就是城市,就从两个儿子向上转移。
而现在的一个问题就是:我们的 \(dp\) 数组根本开不下。
我们不得不优化空间。
考虑到一个性质:每次的答案都是从儿子向上合并,合并过后的节点就没用了。
所以我们只需要在dfs的过程中给每个节点记一个 \(dfn\),满足:
\(dfn_{ls}=dfn_{fa} + 1, dfn_{rs}=dfn_{fa} + 2\)
我们把空间回收利用起来,很容易计算 \(dp\) 的第一位,只需要开到 \(2*40+1=81\) 即可。
这样就可以愉快的 DP 了,答案就是 \(dp[1][0][0]\)
细节注意事项
- 咕咕咕
参考代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cctype>
#include <cmath>
#include <ctime>
#define rg register
using namespace std;
template < typename T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while (!isdigit(c)) f |= c == '-', c = getchar();
while (isdigit(c)) s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
}
typedef long long LL;
const int _ = 20010;
int n, a[_ << 1], b[_ << 1], c[_ << 1], ch[2][_];
LL dp[90][50][50];
inline void dfs(int s, int u, int x, int y) {
if (u >= n) {
for (rg int i = 0; i <= x; ++i)
for (rg int j = 0; j <= y; ++j)
dp[s][i][j] = 1ll * c[u] * (a[u] + i) * (b[u] + j);
return;
}
dfs(s + 1, ch[0][u], x + 1, y);
dfs(s + 2, ch[1][u], x, y + 1);
int ls = s + 1, rs = s + 2;
for (rg int i = 0; i <= x; ++i)
for (rg int j = 0; j <= y; ++j)
dp[s][i][j] = min(dp[ls][i + 1][j] + dp[rs][i][j], dp[ls][i][j] + dp[rs][i][j + 1]);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.in", "r", stdin);
#endif
read(n);
for (rg int i = 1; i < n; ++i) {
read(ch[0][i]), ch[0][i] = ch[0][i] < 0 ? n - ch[0][i] - 1 : ch[0][i];
read(ch[1][i]), ch[1][i] = ch[1][i] < 0 ? n - ch[1][i] - 1 : ch[1][i];
}
for (rg int i = 1; i <= n; ++i)
read(a[i + n - 1]), read(b[i + n - 1]), read(c[i + n - 1]);
dfs(1, 1, 0, 0);
printf("%lld\n", dp[1][0][0]);
return 0;
}
完结撒花 \(qwq\)
「HNOI/AHOI2018」道路的更多相关文章
- 「HNOI/AHOI2018」游戏
传送门 Luogu 解题思路 这是一道 \(O(n^2)\) 暴力加上 \(\text{random_shuffle}\) 优化 什么鬼 就可以 \(\text{AC}\) 的题. 但还是要讲一下 \ ...
- LOJ#3054. 「HNOI 2019」鱼
LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...
- loj #2510. 「AHOI / HNOI2018」道路
#2510. 「AHOI / HNOI2018」道路 题目描述 W 国的交通呈一棵树的形状.W 国一共有 n−1 个城市和 nnn 个乡村,其中城市从 111 到 n−1 编号,乡村从 111 到 n ...
- 「HNOI 2019」白兔之舞
一道清真的数论题 LOJ #3058 Luogu P5293 题解 考虑$ n=1$的时候怎么做 设$ s$为转移的方案数 设答案多项式为$\sum\limits_{i=0}^L (sx)^i\bin ...
- loj#2510. 「AHOI / HNOI2018」道路 记忆化,dp
题目链接 https://loj.ac/problem/2510 思路 f[i][a][b]表示到i时,公路个数a,铁路个数b 记忆化 复杂度=状态数=\(nlog^2n\) 代码 #include ...
- 【LOJ】#2510. 「AHOI / HNOI2018」道路
题解 读题是做题关键 我们设\(dp[u][l][r]\)表示\(u\)节点上方没改\(l\)条公路和\(r\)条铁路 然后记忆化搜索,枚举这条点改左边还是右边 代码 #include <bit ...
- 「HNOI 2016」 序列
\(Description\) 给你一个序列,每次询问一个区间,求其所有子区间的最小值之和 \(Solution\) 这里要用莫队算法 首先令\(val\)数组为原序列 我们考虑怎么由一个区间\([l ...
- 「HNOI 2015」实验比较
\(Description\) 有\(n\)个元素,对于每个元素\(x_i\)最多知道一个形如\(x_j < x_i\)或\(x_j=x_i\)的条件,问有多少合法的序列.合法的序列满足每个元素 ...
- 「HNOI 2014」 江南乐
\(Description\) \(n\)堆石子,每堆石子有\(s_i\)个,两个人轮流操作,每次可以将一对不少于\(F\)的石子尽量平均分成\(m\)堆,\(m\)每次自选,不能操作者输.共有\(T ...
随机推荐
- java代码向kafka集群发送消息报org.apache.kafka.common.errors.TimeoutException: Batch Expired
由于项目是springboot项目,在application.properties加入 logging.level.root=debug debug日志报错信息为kafka集群ip别名访问失败 在wi ...
- Services: ARP Caching
Online Help for Cisco IOS Release 12.2(15)JA Services: ARP Caching ARP caching on the access point ...
- IKAnalyzer使用
1.分析器 所有分析器最终继承的类都是Analyzer 1.1 默认标准分析器:StandardAnalyzer 在我们创建索引的时候,我们使用到了IndexWriterConfig对象,在我们创建索 ...
- Java语言特性、加载与执行
[开源.免费.纯面向对象.跨平台] 简单性: 相对而言,例如,Java是不支持多继承的,C++是支持多继承的,多继承比较复杂:C++ 有指针,Java屏蔽了指针的概念.所以相对来说Java是简单的. ...
- JavaScript中关于隐式转换的一些总结
JavaScript运算符中的隐式转换规律:一.递增递减运算符(前置.后置)1.如果包含的是有效数字字符串或者是有效浮点数字符串,则会将字符串转换(Number())为数值,再进行加减操作,返回值的类 ...
- vue.js 第十课-第十六课
第十课: http://note.youdao.com/noteshare?id=25b5ba45286464856f21eb4b6b391ecd&sub=19C4429995384F72BD ...
- 企业行业分类数据库JSON
这篇文章主要介绍了 企业信息中选择行业类型,常用在企业注册,入驻填写企业信息等. JSON: [{"id":1001,"name":"IT服务&quo ...
- 「题解」「HNOI2013」切糕
文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...
- 「模板」可持久化 HFQ-Treap
老师用的是静态数组的写法,开了很多数组- 其实个人更倾向于 struct 或者用 class 封装起来. 但是鉴于太难打 好吧,是我懒得打. 然后就借鉴了老师的模板,写出了属于自己的 压行 风格. 代 ...
- nginx 网络层的优化
TCP三次握手四次挥手 系统层的优化,主动建立连接时的重试次数 net.ipv4.tcp_syn_retries = 6 建立连接时本地端口可用范围:手动可以tiaoz net.ipv4.ip_loc ...