BZOJ3829 [Poi2014]FarmCraft 【树形dp】
题目链接
题解
设\(f[i]\)为从\(i\)父亲进入\(i\)之前开始计时,\(i\)的子树中最晚装好的时间
同时记\(siz[i]\)为节点\(i\)子树大小的两倍,即为从父亲进入并回到父亲的时间
那么有
\]
我们只需给出一个合理的访问子树的顺序,以最小化\(f[i]\)的值
我们先考虑最后访问的一棵子树,记\(sum = \sum siz[to]\)
那么最后一棵子树的贡献
\]
显然按\(f[to] - siz[to]\)排序,最小的放最后,次小的放倒数第二,以此类推
用扰动法可以证明是对的
复杂度\(O(nlogn)\)
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
using namespace std;
const int maxn = 500005,maxm = 100005,INF = 1000000000;
inline int read(){
	int out = 0,flag = 1; char c = getchar();
	while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
	while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
	return out * flag;
}
int h[maxn],ne = 1;
struct EDGE{int to,nxt;}ed[maxn << 1];
inline void build(int u,int v){
	ed[++ne] = (EDGE){v,h[u]}; h[u] = ne;
	ed[++ne] = (EDGE){u,h[v]}; h[v] = ne;
}
int n,C[maxn],siz[maxn],f[maxn],fa[maxn],c[maxn],ci;
inline bool cmp(const int& a,const int& b){
	return f[a] - siz[a] < f[b] - siz[b];
}
void dfs(int u){
	siz[u] = 2;
	Redge(u) if ((to = ed[k].to) != fa[u]){
		fa[to] = u; dfs(to); siz[u] += siz[to];
	}
	ci = 0;
	Redge(u) if ((to = ed[k].to) != fa[u]) c[++ci] = to;
	sort(c + 1,c + 1 + ci,cmp);
	int sum = siz[u] - 2;
	REP(i,ci) f[u] = max(f[u],f[c[i]] - siz[c[i]] + sum),sum -= siz[c[i]];
	if (u != 1) f[u] = max(f[u] + 1,C[u] + 1);
}
int main(){
	n = read();
	REP(i,n) C[i] = read();
	for (int i = 1; i < n; i++) build(read(),read());
	dfs(1);
	printf("%d\n",max(f[1],(n - 1) * 2 + C[1]));
	return 0;
}
BZOJ3829 [Poi2014]FarmCraft 【树形dp】的更多相关文章
- BZOJ3829[Poi2014]FarmCraft——树形DP+贪心
		题目描述 In a village called Byteville, there are houses connected with N-1 roads. For each pair of ho ... 
- 【BZOJ3829】[Poi2014]FarmCraft 树形DP(贪心)
		[BZOJ3829][Poi2014]FarmCraft Description In a village called Byteville, there are houses connected ... 
- bzoj 3829: [Poi2014]FarmCraft  树形dp+贪心
		题意: $mhy$ 住在一棵有 $n$ 个点的树的 $1$ 号结点上,每个结点上都有一个妹子. $mhy$ 从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装 $zhx$ 牌杀毒 ... 
- [bzoj3829][Poi2014]FarmCraft_树形dp
		FarmCraft 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=3829 数据范围:略. 题解: 因为每条边只能必须走两次,所以我们的路径一定是 ... 
- 【BZOJ3522】[Poi2014]Hotel 树形DP
		[BZOJ3522][Poi2014]Hotel Description 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房 ... 
- BZOJ3522[Poi2014]Hotel——树形DP
		题目描述 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房(间).三个妹子住的房间要互不相同(否则要打起来了),为了让吉丽 ... 
- 3522: [Poi2014]Hotel( 树形dp )
		枚举中点x( 即选出的三个点 a , b , c 满足 dist( x , a ) = dist( x , b ) = dist( x , c ) ) , 然后以 x 为 root 做 dfs , 显 ... 
- [POI2014]FAR-FarmCraft     树形DP + 贪心思想
		(感觉洛谷上题面那一小段中文根本看不懂啊,好多条件都没讲,直接就是安装也要一个时间啊,,,明明不止啊!还好有百度翻译......) 题意:一棵树,一开始在1号节点(root),边权都为1,每个点有点权 ... 
- POI2014 FAR-FarmCraft 树形DP+贪心
		题目链接 https://www.luogu.org/problem/P3574 题意 翻译其实已经很明确了 分析 这题一眼就是贪心啊,但贪心的方法要思索一下,首先是考虑先走时间多的子树,但不太现实, ... 
随机推荐
- Siki_Unity_4-4_丛林战争_Socket/TCP网络游戏开发
			Unity 4-4 丛林战争(Socket/TCP网络游戏开发) 任务1:素材.演示.Prerequisite 使用c#的有关TCP的底层API进行服务器端的开发(直接通过socket进行通信) 功能 ... 
- 脚本处理iOS的Crash日志
			背景 当我们打包app时,可以选择生成对应的符号表,其保存 16 进制函数地址映射信息,通过给定的函数起始地址和偏移量,可以对应函数具体信息以供分析. 所以我们拿到测试给的闪退日志(.crash)时, ... 
- 1042 Shuffling Machine
			一.题目描述 Shuffling is a procedure used to randomize a deck of playing cards. Because standard shufflin ... 
- PCL 库存在vtk的问题导致libproj.so链接错误
			常变现为** No rule to make target '/usr/lib/x86_64-linux-gnu/libproj.so', needed by ××× vtk库的bug导致,目前尚未修 ... 
- MyBatis思维导图
			1.初识框架技术 2.搭建MyBatis环境 3.掌握MyBatis的核心API 4.掌握MyBatis的核心配置文件:主要用于配置数据库连接和MyBatis运行时所需的各种特性 5.掌握SQL映射文 ... 
- Python交互数据库(Mysql | Mongodb | Redis)
			数据库 Mysql Mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,后来被Sun公司收购,Sun公司后来又被Oracle公司收购,目前属于Oracle旗下产品 MyS ... 
- TeamWork#3,Week5,Scrum Meeting 11.16
			到目前为止各方面工作已经基本完成,爬虫程序也调整完毕,正在等待全部整合. 成员 已完成 待完成 彭林江 完成爬虫结构调整 新爬虫与服务器连接 郝倩 完成爬虫结构调整 新爬虫与服务器连接 高雅智 重定位 ... 
- OO第一阶段作业总结
			对于OO这门课,学长学姐偶尔提起,大家都略有耳闻,但是并没有将其和计组相提并论.因此,在刚开始接触的时候,并不认为其会比计组难到哪里去,然而事实证明,还是不要想当然去判断,以及不提前学好JAVA对于O ... 
- mysql 修改语句及耗时
			1.含有某串字母的字段替换: update imagetable set imageID = replace(imageID, 'ZH0211001', 'ZH4111001') 只要imageID含 ... 
- 数据库,总结,新技能get
			上来先粘代码吧,这篇本来就不是用来让你们看的,我就是单纯的记录下,嗯~对,总结!!! 首先:first //绑定年份 YearSearch.Items.Clear(); for (int i = Da ... 
