Problem

bzoj权限题,洛谷上可提交

洛谷上的奇葩翻译不要看,很多条件缺漏

题意简述:给定一棵树,每条边权为1,给定所有点点权,每条边仅能走两次,求以一定顺序遍历整棵树后,使所有点中的到达时间加点权的和的最大值最小(到达了就开始安装程序,点权即为安装时间,求最早什么时候所有电脑安装完毕)

Solution

前置技能:树形Dp、贪心

这一类\(n\)在\(1e5\)范围的树上问题,一般都是树状Dp,考虑到题目中每条边仅能走两次,所以一旦到达了一个节点,一定会将以这个节点为根的子树全部遍历完再出子树,所以只用考虑到达一个节点后访问其儿子的先后顺序

考虑到遍历每棵子树的时间是一定的,即至少要花遍历整颗子树的时间,定义富余时间为遍历完某棵子树之后还需等待的时间,即子树下所有程序安装完的时间减去遍历时间,那么有一个贪心策略就是富余时间多的子树优先遍历,因为整棵树的遍历时间一定,所以富余部分多的优先解决

然后就没了,时间\(O(n\log n)\),本地测会爆栈,直接交就好了

Code

#include<bits/stdc++.h>
using namespace std;
#define rg register template <typename _Tp> inline _Tp read(_Tp&x){
char c11=getchar(),ob=0;x=0;
while(c11^'-'&&!isdigit(c11))c11=getchar();if(c11=='-')ob=1,c11=getchar();
while(isdigit(c11))x=x*10+c11-'0',c11=getchar();if(ob)x=-x;return x;
} const int N=501000;
struct Edge{int v,nxt;}a[N<<1];
int head[N],f[N],g[N],stk[N];
int n,_; template <typename _Tp> inline _Tp tmax(const _Tp A,const _Tp B){return A>B?A:B;} inline void add(int u,int v){a[++_].v=v,a[_].nxt=head[u],head[u]=_;return ;} inline int cmp(const int&A,const int&B){return f[A]-g[A]>f[B]-g[B];} inline void dfs(int x,int fa){
for(int i=head[x];i;i=a[i].nxt)
if(a[i].v!=fa)
dfs(a[i].v,x);
int top=0;
for(rg int i=head[x];i;i=a[i].nxt)
if(a[i].v!=fa){
g[a[i].v]+=2;
f[a[i].v]=tmax(g[a[i].v],f[a[i].v]+1);
stk[++top]=a[i].v;
}
sort(stk+1,stk+top+1,cmp);
for(rg int i=1;i<=top;++i){
f[x]=tmax(f[x],g[x]+f[stk[i]]);
g[x]+=g[stk[i]];
}return ;
} int main(){
read(n);
for(rg int i=1;i<=n;++i)read(f[i]);int vas=f[1];
for(rg int i=1,x,y;i<n;++i)read(x),read(y),add(x,y),add(y,x);
dfs(1,0);printf("%d\n",tmax(f[1],g[1]+vas));return 0;
}

题解-POI2014 FAR-FarmCraft的更多相关文章

  1. 题解-POI2014 Supercomputer

    Problem 辣鸡bzoj权限题,洛谷链接 题意概要:一棵 \(n\) 个点有根树.\(Q\) 次询问给出一个 \(K\),回答遍历完整棵树所需最少操作次数.每次操作可以选择访问不超过 \(K\) ...

  2. POI2014题解

    POI2014题解 [BZOJ3521][Poi2014]Salad Bar 把p当作\(1\),把j当作\(-1\),然后做一遍前缀和. 一个合法区间\([l,r]\)要满足条件就需要满足所有前缀和 ...

  3. 【BZOJ3829】[Poi2014]FarmCraft 树形DP(贪心)

    [BZOJ3829][Poi2014]FarmCraft Description In a village called Byteville, there are   houses connected ...

  4. [补档][Poi2014]FarmCraft

    [Poi2014]FarmCraft 题目 mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子. mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒 ...

  5. FarmCraft[POI2014]

    题目描述 In a village called Byteville, there are   houses connected with N-1 roads. For each pair of ho ...

  6. [BZOJ 3829][POI2014] FarmCraft

    先贴一波题面... 3829: [Poi2014]FarmCraft Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 421  Solved: 197[ ...

  7. 【bzoj3829】[Poi2014]FarmCraft 贪心

    原文地址:http://www.cnblogs.com/GXZlegend/p/6826667.html 题目描述 In a village called Byteville, there are   ...

  8. BZOJ3829[Poi2014]FarmCraft——树形DP+贪心

    题目描述 In a village called Byteville, there are   houses connected with N-1 roads. For each pair of ho ...

  9. BZOJ3829 [Poi2014]FarmCraft 【树形dp】

    题目链接 BZOJ3829 题解 设\(f[i]\)为从\(i\)父亲进入\(i\)之前开始计时,\(i\)的子树中最晚装好的时间 同时记\(siz[i]\)为节点\(i\)子树大小的两倍,即为从父亲 ...

随机推荐

  1. Oracle DataBase 编码格式

    sqlplus 查询 Oracle 数据库结果乱码或显示 ? 则需要设置字符集 一.客户端字符集 格式:NLS_LANG=language_territory.charset Language: 指定 ...

  2. MySql 游标笔记

    delimiter &&create PROCEDURE findProjectDetailsByProjectId(in p_userId int)BEGIN   DECLARE d ...

  3. Web API中使用CORS解决跨域

    Web API中使用Cros解决跨域 如果两个页面的协议,端口和域名都相同,则两个页面具有相同的源,注:IE不考虑端口,同源策略不会阻止浏览器发送请求,但是它会阻止应用程序看到响应.如下图所示 COR ...

  4. Chrome Dev Tools: Code Folding in CSS and Javascript for improved code readiability

    Note : Apply for google chrome canary. You can fold code blocks in CSS (and Sass) and javascript fil ...

  5. row_number()over()使用

    语法: ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause ) 通过语法可以看出 o ...

  6. 040、Docker managed volume(2019-03-01 周五)

    参考https://www.cnblogs.com/CloudMan6/p/7152775.html   docker managed volume 与bind mount 在使用上最大的区别是不需要 ...

  7. Silverlight程序之修改命名空间

    有时候,为了使用已有的代码,可能需要更改主程序的命名空间,以生成新的应用.修改命名空间,不能胡乱一通全部使用“替换”,否则程序可能无法正常运行.通过笔者实践,主要有以下几个地方需要注意(以WebGIS ...

  8. 【剑指offer】Java版代码(完整版)

    原文地址:https://blog.csdn.net/baiye_xing/article/details/78428561 一.引言 <剑指offer>可谓是程序猿面试的神书了,在面试中 ...

  9. 22.doublewrite/ChangeBuffer/AHI/FNP

    一. Double Write1 Double Write介绍 • Double Write的目的是为了保证数据写入的可靠性, 避免partial write 的情况 ◦ partial write( ...

  10. spring boot2 整合(一)Mybatis (特别完整!)

    大概介绍下流程: 借助idea实现mybatis逆向工程 用xml配置实现整合 用cmd命令行实现mybatis逆向工程 用mapping.xml配置实现数据交互 用注解的方式实现数据交互 首先我的开 ...