[HNOI2018]道路

题目描述:

W 国的交通呈一棵树的形状。W 国一共有 \(n-1\) 个城市和 \(n\) 个乡村,

其中城市从 \(1\) 到 \(n-1\) 编号,乡村从 \(1\) 到 \(n\) 编号,且 \(1\) 号城市是首都。

道路都是单向的,本题中我们只考虑从乡村通往首都的道路网络。

对于每一个城市,恰有一条公路和一条铁路通向这座城市。

对于城市\(i\), 通向该城市的道路(公路或铁路)的起点,要么是一个乡村,要么是一个编号比 \(i\) 大的城市。

没有道路通向任何乡村。除了首都以外,从任何城市或乡村出发只有一条道路;

首都没有往 外的道路。从任何乡村出发,沿着唯一往外的道路走,总可以到达首都。

W 国的国王小 W 获得了一笔资金,他决定用这笔资金来改善交通。

由于资金有限,小 W 只能翻修 \(n-1\) 条道路。

小 W 决定对每个城市翻修恰好一条通向它的道路,即从公路和铁 路中选择一条并进行翻修。

小 W 希望从乡村通向城市可以尽可能地便利,于是根据人口调 查的数据,

小 W 对每个乡村制定了三个参数,编号为 \(i\) 的乡村的三个参数是 \(a_{i} \; b_{i} \; c_{i} \)​。

假设 从编号为 \(i\) 的乡村走到首都一共需要经过 \(x\) 条未翻修的公路与 \(y\) 条未翻修的铁路,那么该乡村 的不便利值为

\(c_{i} * (a_{i} + x) * (b_{i} + y)\)

在给定的翻修方案下,每个乡村的不便利值相加的和为该翻修方案的不便利值。

翻修 \(n-1\) 条道路有很多方案,其中不便利值最小的方案称为最优翻修方案,

小 W 自然 希望找到最优翻修方案,请你帮助他求出这个最优翻修方案的不便利值。

输入格式:

第一行为正整数 \(n\)。

接下来 \(n-1\) 行,每行描述一个城市。其中第 \(i\) 行包含两个数 \(s_{i}\;t_{i}\) 。

\(s_{i}\) 表示通向第 \(i\) 座城市 的公路的起点, \(t_{i}\)​ 表示通向第\(i\)座城市的铁路的起点。

如果 \(s_{i} > 0\) ,那么存在一条从第 \(s_{i}\)​ 座城 市通往第 \(i\) 座城市的公路,否则存在一条从第 \(s_{i}\)个乡村通往第\(i\)座城市的公路;

\(t_{i}\)​ 类似地,如 果 \(t_{i}>0\) ,那么存在一条从第 \(t_{i}\) 座城市通往第\(i\)座城市的铁路,否则存在一条从第 \(t_{i}\)​ 个乡村通 往第 \(i\) 座城市的铁路。

接下来 \(n\) 行,每行描述一个乡村。

其中第\(i\)行包含三个数 \(a_{i}\;b_{i}\;c_{i}\),其意义如题面所示。

输出格式:

输出一行一个整数,表示最优翻修方案的不便利值。

改这题面真累。

看起来就像个DP题。

然后,可以发现是棵二叉树。。。

先看数据估计状态,通过计算,发现\(O(n*dep*dep)\)接近极限

不妨设状态为\(dp(i,j,k)\)

表示对于\(i\)号节点而言,首都到它的路径存在\(j\)个公路和\(k\)个铁路的最小权值。

不难想出:

对于乡村而言,\(dp(i,j,k)=a_{i}*(b_{i}+j)*(c_{i}+k)\)

对于城市而言,\(dp(i,j,k)=min(dp(ls,j+1,k)+dp(rs,j,k),dp(ls,j,k)+dp(rs,j,k+1))\)

每一层中暴力枚举\(40*40\)次即可。

不用剪枝(反正复杂度过得去)

但是,空间开不下,因此要维护一个表示当前链的栈

注意到在DP中,每个状态只会被访问到一次,因此访问完\(x\),就可以回收\(ls(x)\)和\(rs(x)\)了

时间复杂度:\(O(3200*n)\)

空间复杂度:\(O(40^{3}*2)\)

这题为什么难呢?

因为它给人一种数论题的感觉。

代码在此

[HNOI2018]道路 --- 树形DP的更多相关文章

  1. BZOJ.5290.[AHOI/HNOI2018]道路(树形DP)

    BZOJ LOJ 洛谷 老年退役选手,都写不出普及提高DP= = 在儿子那统计贡献,不是在父亲那统计啊!!!(这样的话不写这个提高DP写记忆化都能过= =) 然后就令\(f[x][a][b]\)表示在 ...

  2. 重建道路 树形DP

    重建道路 树形DP 给一棵树,问最少断多少边使得这棵树树最终只有\(p​\)个节点 设计dp状态\(f[u][i][j]\)表示节点\(u\),到第\(i\)个儿子,使\(j\)个节点分离,但是不分离 ...

  3. bzoj2500幸福的道路 树形dp+单调队列

    2500: 幸福的道路 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 434  Solved: 170[Submit][Status][Discuss ...

  4. 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...

  5. P1272 重建道路(树形dp)

    P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...

  6. (noip模拟二十一)【BZOJ2500】幸福的道路-树形DP+单调队列

    Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的小T发现可以用树来描绘这个草图. ...

  7. 洛谷 P1272 重建道路(树形DP)

    P1272 重建道路 题目描述 一场可怕的地震后,人们用N个牲口棚(1≤N≤150,编号1..N)重建了农夫John的牧场.由于人们没有时间建设多余的道路,所以现在从一个牲口棚到另一个牲口棚的道路是惟 ...

  8. [BZOJ 2500]幸福的道路 树形dp+单调队列+二分答案

    考试的时候打了个树链剖分,而且还审错题了,以为是每天找所有点的最长路,原来是每天起点的树上最长路径再搞事情.. 先用dfs处理出来每个节点以他为根的子树的最长链和次长链.(后面会用到) 然后用类似dp ...

  9. 【bzoj2500】幸福的道路 树形dp+单调队列

    Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的小T发现可以用树来描绘这个草图. ...

随机推荐

  1. idea自动识别get set方法

  2. 【NOI2017】游戏 2-sat算法

    [题目]LibreOJ [题意]n场游戏,有三种车ABC,给定长度为n的字符串,'a'表示不能选A,'b''c'同理,'x'表示不限,至多d个'x'.有m个限制(i,hi,j,hj)表示如果第i场选择 ...

  3. styled-components真的好吗?

    最近在学习react,然后遇到react中css该怎么写这个问题,上知乎上看了好多大牛都说styled-components好用是大势所趋. 但我自己用了感觉体验却很差,我在这里说说我为啥觉得styl ...

  4. 49、是否使用过functools中的函数?其作用是什么?

    functools模块介绍 functools用于高阶函数:指那些作用于函数或者返回其他函数的函数.通常情况下,只要是可以被当做函数调用的对象就是这个模块的目标. functools模块的功能 pyt ...

  5. Masquerade strikes back Gym - 101911D(补题) 数学

    https://vjudge.net/problem/Gym-101911D 具体思路: 对于每一个数,假设当前的数是10 分解 4次,首先 1 10 这是一对,然后下一次就记录 10 1,这样的话直 ...

  6. [转载]PM管理技巧

      产品经理的沟通策略 2016年10月11日/分类: 文章 /编辑: Amy 产品经理处于沟通枢纽的位置,工作中需要跟各种岗位的人打交道,比如:领导.开发.运营.客户.用户.合作伙伴… 沟通能力是产 ...

  7. Python3中对Dict的内存优化

    众所周知,python3.6这个版本对dict的实现是做了较大优化的,特别是在内存使用率方面,因此我觉得有必要研究一下最新的dict的源码实现. 前后断断续续看了大概一周多一点,主要在研究dict和创 ...

  8. 在shell中如何判断字符串是否为有效的IP地址【转】

    转自 在shell中如何判断字符串是否为有效的IP地址_echoisecho_新浪博客http://blog.sina.com.cn/s/blog_53a844e50100xxus.html 近来需要 ...

  9. 增加Android模拟器空间(Internal Storage)

    转载 http://vase.iteye.com/blog/2114664   初学Android,发现模拟器上有不少限制,譬如标题中的存储限制,无论用ADT Manager如何设置,内部存储空间不会 ...

  10. mysql root 密码恢复

    1.停止mysql服务 service mysql stop 2.启动mysql时不启动授权表,跳过权限验证使用空密码登陆 mysqld_safe --skip-grant-tables & ...