这题很考思维啊,考验我们能否快速从省选难度跳转到普及难度

考试的时候真的想得太多,觉得省选不可能这么简单吧,然后就打脸

设 \(f[i][j][x]\) 表示从根到 \(x\) 号点,有 \(i\) 条公路未修,有 \(j\) 条铁路未修的最小答案

然后?

直接转移啊

对于乡村:\(f[i][j][x]=c[x]*(a[x]+i)*(b[x]+j)\)

对于城市:\(f[i][j][x]=min\{f[i+1][j][ls]+f[i][j][rs],f[i][j][ls]+f[i][j+1][rs]\}\)

然后应对卡空间,另类滚动一下就好了

#include<bits/stdc++.h>
#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
const int MAXN=20001;
int n,nxt[MAXN][2],stack[110],cnt,pt[MAXN<<1];
ll f[45][45][110],inf=0x3f3f3f3f3f3f3f3f;
struct data{
int a,b,c;
};
data cty[MAXN];
template<typename T> inline void read(T &x)
{
T data=0,w=1;
char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
x=data*w;
}
template<typename T> inline void write(T x,char ch='\0')
{
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
if(ch!='\0')putchar(ch);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline void dfs(int x,int Mi,int Mj)
{
stack[++cnt]=x;pt[x]=cnt;
if(x>n-1)
for(register int i=0;i<=Mi;++i)
for(register int j=0;j<=Mj;++j)f[i][j][pt[x]]=1ll*cty[x-n+1].c*(cty[x-n+1].a+i)*(cty[x-n+1].b+j);
else
{
dfs(nxt[x][0],Mi+1,Mj);dfs(nxt[x][1],Mi,Mj+1);
for(register int i=0;i<=Mi;++i)
for(register int j=0;j<=Mj;++j)f[i][j][pt[x]]=min(f[i+1][j][pt[nxt[x][0]]]+f[i][j][pt[nxt[x][1]]],f[i][j][pt[nxt[x][0]]]+f[i][j+1][pt[nxt[x][1]]]);
cnt-=2;
}
}
int main()
{
freopen("road.in","r",stdin);
freopen("road.out","w",stdout);
read(n);
for(register int i=1;i<n;++i)
{
int x,y;
read(x);read(y);
if(x<0)x=-x+n-1;if(y<0)y=-y+n-1;
nxt[i][0]=x;nxt[i][1]=y;
}
for(register int i=1;i<=n;++i)read(cty[i].a),read(cty[i].b),read(cty[i].c);
dfs(1,0,0);
write(f[0][0][pt[1]],'\n');
return 0;
}

【比赛】HNOI2018 道路的更多相关文章

  1. 【BZOJ5290】 [Hnoi2018]道路

    BZOJ5290 [Hnoi2018]道路 前言 这道题目我竟然没有在去年省选切? 我太菜了. Solution 对题面进行一个语文透彻解析,发现这是一个二叉树,乡村都是叶子节点,城市都有两个儿子.( ...

  2. 5290: [Hnoi2018]道路

    5290: [Hnoi2018]道路 链接 分析: 注意题目中说每个城市翻新一条连向它的公路或者铁路,所以两种情况分别转移一下即可. 注意压一下空间,最后的叶子节点不要要访问,空间少了一半. 代码: ...

  3. [HNOI2018]道路 --- 树形DP

    [HNOI2018]道路 题目描述: W 国的交通呈一棵树的形状.W 国一共有 \(n-1\) 个城市和 \(n\) 个乡村, 其中城市从 \(1\) 到 \(n-1\) 编号,乡村从 \(1\) 到 ...

  4. 【BZOJ5290】[HNOI2018]道路(动态规划)

    [BZOJ5290][HNOI2018]道路(动态规划) 题面 BZOJ 洛谷 题目直接到洛谷上看吧 题解 开始写写今年省选的题目 考场上我写了一个模拟退火骗了\(90\)分...然而重测后只剩下45 ...

  5. bzoj 5290: [Hnoi2018]道路

    Description Solution PJDP毁青春 注意到性质:到根的道路不超过 \(40\) 条 所以我们只关系一个点上面的道路的情况就行了 设 \(f[x][i][j]\) 表示一个点 \( ...

  6. [HNOI2018]道路(DP)

    题目描述 W 国的交通呈一棵树的形状.W 国一共有n−1n - 1n−1 个城市和nnn 个乡村,其中城市从111 到n−1n - 1n−1 编号,乡村从111 到nnn 编号,且111 号城市是首都 ...

  7. 洛谷4438 [Hnoi2018]道路 【树形dp】

    题目 题目太长懒得打 题解 HNOI2018惊现普及+/提高? 由最长路径很短,设\(f[i][x][y]\)表示\(i\)号点到根有\(x\)条未修公路,\(y\)条未修铁路,子树所有乡村不便利值的 ...

  8. [洛谷P4438] HNOI2018 道路

    问题描述 W 国的交通呈一棵树的形状.W 国一共有n - 1个城市和n个乡村,其中城市从1到n - 1 编号,乡村从1到n编号,且1号城市是首都.道路都是单向的,本题中我们只考虑从乡村通往首都的道路网 ...

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

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

随机推荐

  1. UTC时间转为正常日期

    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);SimpleDa ...

  2. spring-boot 项目整合logback

    使用spring-boot项目中添加日志输出,java的日志输出一共有两个大的方案log4j/log4j2 ,logback.log4j2算是对log4j的一个升级版本. 常规做法是引入slf4j作为 ...

  3. 如何在 Debian 9 下安装 LEMP 和 WHMCS 7.5

    WHMCS 7.5 发布了,它开始支持 PHP 7.2,这里就写个简单的教程记录一下安装方式. 1.准备工作 首先,我们需要按照 在Debian 9 / Debian 8 下使用源安装方式安装 LEM ...

  4. charles 在mac下 抓取 https包

    1.  打开charles --> help --> SSL proxying --> install charles root certificate 2. 在弹出的添加证书窗口中 ...

  5. 与面试官谈笑风生 | Python面向对象之访问控制

    Python从设计之初就是一门面向对象的语言,面向对象思想的第一个要素就是封装.所谓封装,通俗的讲就是类中的属性和方法,分为公有和私有,公有可以被外界访问,私有不能被外界访问,这就是封装中最关键的概念 ...

  6. mysql 性能优化 20 条建议

    MySQL性能优化的最佳20+条经验 2009年11月27日陈皓发表评论阅读评论100,946 人阅读   今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性 ...

  7. 效能检测 psp

    1.本周psp: 2.本周进度条: 3.累计进度图(折线图) 4.psp饼状图:

  8. 20162328蔡文琛 week06 大二

    20162328 2017-2018-1 <程序设计与数据结构>第6周学习总结 教材学习内容总结 队列元素按FIFO的方式处理----最先进入的元素最先离开. 队列是保存重复编码k值得一种 ...

  9. Windows上安装、配置MySQL的常见问题

    一,MySQL的下载安装 MySQL的安装过程就不说了,基本上和一般软件的安装过程没什么两样,就是一路点next,设置的root用户的密码要牢记.具体教程可以参考:http://jingyan.bai ...

  10. 第三章 ServerSpcket用法详解

    构造ServerSocket ServerSocket的构造方法如下: ServerSocket() //Creates an unbound server socket. ServerSocket( ...