【比赛】HNOI2018 道路




这题很考思维啊,考验我们能否快速从省选难度跳转到普及难度
考试的时候真的想得太多,觉得省选不可能这么简单吧,然后就打脸
设 \(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 道路的更多相关文章
- 【BZOJ5290】 [Hnoi2018]道路
		BZOJ5290 [Hnoi2018]道路 前言 这道题目我竟然没有在去年省选切? 我太菜了. Solution 对题面进行一个语文透彻解析,发现这是一个二叉树,乡村都是叶子节点,城市都有两个儿子.( ... 
- 5290: [Hnoi2018]道路
		5290: [Hnoi2018]道路 链接 分析: 注意题目中说每个城市翻新一条连向它的公路或者铁路,所以两种情况分别转移一下即可. 注意压一下空间,最后的叶子节点不要要访问,空间少了一半. 代码: ... 
- [HNOI2018]道路 --- 树形DP
		[HNOI2018]道路 题目描述: W 国的交通呈一棵树的形状.W 国一共有 \(n-1\) 个城市和 \(n\) 个乡村, 其中城市从 \(1\) 到 \(n-1\) 编号,乡村从 \(1\) 到 ... 
- 【BZOJ5290】[HNOI2018]道路(动态规划)
		[BZOJ5290][HNOI2018]道路(动态规划) 题面 BZOJ 洛谷 题目直接到洛谷上看吧 题解 开始写写今年省选的题目 考场上我写了一个模拟退火骗了\(90\)分...然而重测后只剩下45 ... 
- bzoj 5290: [Hnoi2018]道路
		Description Solution PJDP毁青春 注意到性质:到根的道路不超过 \(40\) 条 所以我们只关系一个点上面的道路的情况就行了 设 \(f[x][i][j]\) 表示一个点 \( ... 
- [HNOI2018]道路(DP)
		题目描述 W 国的交通呈一棵树的形状.W 国一共有n−1n - 1n−1 个城市和nnn 个乡村,其中城市从111 到n−1n - 1n−1 编号,乡村从111 到nnn 编号,且111 号城市是首都 ... 
- 洛谷4438  [Hnoi2018]道路  【树形dp】
		题目 题目太长懒得打 题解 HNOI2018惊现普及+/提高? 由最长路径很短,设\(f[i][x][y]\)表示\(i\)号点到根有\(x\)条未修公路,\(y\)条未修铁路,子树所有乡村不便利值的 ... 
- [洛谷P4438] HNOI2018 道路
		问题描述 W 国的交通呈一棵树的形状.W 国一共有n - 1个城市和n个乡村,其中城市从1到n - 1 编号,乡村从1到n编号,且1号城市是首都.道路都是单向的,本题中我们只考虑从乡村通往首都的道路网 ... 
- BZOJ.5290.[AHOI/HNOI2018]道路(树形DP)
		BZOJ LOJ 洛谷 老年退役选手,都写不出普及提高DP= = 在儿子那统计贡献,不是在父亲那统计啊!!!(这样的话不写这个提高DP写记忆化都能过= =) 然后就令\(f[x][a][b]\)表示在 ... 
随机推荐
- js Date对象要注意的问题(时间转换)
			1.时间戳和时间对象可以灵活转变: let n = new Date() // 返回的是当前时间对应的国际时间 let nt =n.getTime() let n2 =new Date(nt) con ... 
- php-laravel中间件使用
			中间件使用 1.项目目录下cmd中php artisan make:middleware adminLogin,创建中间件 2.注册中间件(\Http\kernel.php) protected $r ... 
- Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计
			Volley是由Google开源的.用于Android平台上的网络通信库.Volley通过优化Android的网络请求流程,形成了以Request-RequestQueue-Response为主线的网 ... 
- VPS挂机赚美刀详细介绍–Alexamaster操作流程
			跟 vps 主机打交道时间长了,手里也渐渐积累了些闲置的 vps.让它们这么闲着吧,感觉有些浪费资源:用起来吧,暂时又没有好的项目.一直听说通过 vps挂机可以赚回主机成本,甚至可以盈利.正好这两天有 ... 
- Action Required: Listings Deactivated for Potential Pricing Error
			Dear Seller, We are contacting you because we have detected potential pricing errors in your Amazon. ... 
- Python模块random使用详情
			python常用模块目录 1.random.random()#用于生成一个0到1的随机浮点数:0<= n < 1.0 import random mcw = random.random() ... 
- spark总结——转载
			转载自: spark总结 第一个Spark程序 /** * 功能:用spark实现的单词计数程序 * 环境:spark 1.6.1, scala 2.10.4 */ // 导入相关类库impor ... 
- WEB前端开发流程总结
			作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正 WEB前端开发项目流程总结 1.新建项目 ... 
- 3. IP地址转换函数
			一.字符串表示的IP地址需要被转化为整数(二进制数)方能使用 IPv4地址:点分十进制字符串 IPv6地址:十六进制字符串 有时(如记录日志),我们则要把整数(二进制数)表示的IP地址转化为可读的字符 ... 
- Visiting a Friend(思维)
			Description Pig is visiting a friend. Pig's house is located at point 0, and his friend's house is l ... 
