这个题应该是很容易想到贪心的,只要可是怎么贪才是科学的呢?
我们分析一下题干,对于每个边只能一进一出因此,对于树上的一棵子树,我们只要一进子树就必须遍历完,
因此我们只能进行一遍 dfs() 然后我们发现 dfs() 一遍的时间是一定的,
然后见每个妹子的时间就在这个时间轴上,
分析完了,我们说一下要贪什么。
我们先定义一个概念rest[]就是遍历完这个节点的子树以后我们还要为这个节点所费的时间
One_Stage :除了1节点,之外每个妹子一见面就杀du
Two_Stage :我们发现最后的答案是 Max(rest[1],c[1])+2*n-2
Three_Stage :然后我们考虑怎么找rest[1],
我们发现每个节点的最优rest[],是(子节点的rest[],减去其在这个子树里又经过的时间),再和(他的c[]减去遍历他的时间)取Max
这样我们线性一波就结局了

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#define MAXN 500005
using namespace std;
inline int read()
{
register int sum=;
register char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
inline int Max(int x,int y)
{
return x>y?x:y;
}
int a[MAXN],m[MAXN],n,t[MAXN];
vector<int> Via[MAXN];
void Dfs_T(int x,int fa)
{
register int len=Via[x].size();
for(register int i=;i<len;++i)
if(Via[x][i]!=fa)
{
Dfs_T(Via[x][i],x);
t[x]+=+t[Via[x][i]];
}
}
inline void Init()
{
n=read();
for(register int i=;i<=n;i++)a[i]=read();
for(register int i=,x,y;i<n;i++)x=read(),y=read(),Via[x].push_back(y),Via[y].push_back(x);
Dfs_T(,);
}
int rest[MAXN];
int comp(const int x,const int y)
{
return rest[x]>rest[y];
}
inline void Dfs_A(int x,int fa)
{
register int len=Via[x].size();
for(register int i=;i<len;++i)
if(Via[x][i]!=fa)Dfs_A(Via[x][i],x);
sort(Via[x].begin(),Via[x].end(),comp);
if(x!=)rest[x]=a[x]-t[x];
register int now=t[x];
for(register int i=;i<len;i++)
if(Via[x][i]!=fa)
{
now-=+t[Via[x][i]];
rest[x]=Max(rest[x],rest[Via[x][i]]-now-);
}
if(rest[x]<)rest[x]=;
}
inline void Work()
{
Dfs_A(,);
register int ans=Max(rest[],a[])+t[];
printf("%d",ans);
}
int main()
{
Init();
Work();
return ;
}

[BZOJ3829][Poi2014]FarmCraft 贪心的更多相关文章

  1. 【bzoj3829】[Poi2014]FarmCraft 贪心

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

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

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

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

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

  4. BZOJ3829 : [Poi2014]FarmCraft

    d[x]表示走完x的子树并回到x所需的时间 f[x]表示从走到x开始计时,x子树中最晚的点安装完的最早时间 d[x]=sum(d[i]+2),i是x的孩子 f[x]的计算比较复杂: 考虑将x的各棵子树 ...

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

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

  6. [补档][Poi2014]FarmCraft

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

  7. [BZOJ 3829][POI2014] FarmCraft

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

  8. bzoj 3829: [Poi2014]FarmCraft 树形dp+贪心

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

  9. [Poi2014]FarmCraft 树状dp

    对于每个点,处理出走完其子树所需要的时间和其子树完全下载完软件的时间 易证,对于每个点的所有子节点,一定优先选择差值大的来给后面的时间 树规+贪心. #include<cstdio> #i ...

随机推荐

  1. scala成长之路(4)compaion object——伴生对象的使用

    虽然java一直声称自己是完全面向对象的语言,但一直以来都被很多人所质疑,其中java的静态成员函数就是主要的“罪魁祸首”.由于java中保留了静态方法的调用,导致其编程模式依然有过程式编程的可能,尤 ...

  2. C语言结构体的学习,以及gdb的调式

    #include <stdio.h> #include <string.h> #define format "%d\n%s\n%f\n%f\n%f\n" t ...

  3. 嵌入式框架Zorb Framework搭建四:状态机的实现

    我是卓波,我是一名嵌入式工程师,我万万没想到我会在这里跟大家吹牛皮. 嵌入式框架Zorb Framework搭建过程 嵌入式框架Zorb Framework搭建一:嵌入式环境搭建.调试输出和建立时间系 ...

  4. Waterline从概念到实操

    Waterline基本介绍 Waterline是什么 Waterline是下一代存储和检索引擎,也是Sails框架中使用的默认ORM . ORM的基本概念 Object Relational Mapp ...

  5. 一步一步学Linq to sql(六):探究特性

    延迟执行 IQueryable query = from c in ctx.Customers select c; 这样的查询句法不会导致语句立即执行,它仅仅是一个描述,对应一个SQL.仅仅在需要使用 ...

  6. Python3: 对两个字符串进行匹配

    Python里一共有三种字符串匹配方式,用于判断一个字符串是否包含另一个字符串.比如判断字符串“HelloWorld”中是否包含“World”: def stringCompare(str1, str ...

  7. ReentrantLock类的hasQueuedPredecessors方法和head节点的含义

    部分启发来源自文章:Java并发编程--Lock PART 1 1.如果h==t成立,h和t均为null或是同一个具体的节点,无后继节点,返回false.2.如果h!=t成立,head.next是否为 ...

  8. python os模块atime ,ctime,mtime意义

    ython的os.stat中主要的时间信息有三个:st_mtime,st_atime,st_ctime.   1.st_mtime:time of last modification      最后一 ...

  9. Vue学习(五):列表渲染

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. ISAP 最大流 最小割 模板

    虽然这道题用最小割没有做出来,但是这个板子还是很棒: #include<stdio.h> #include<math.h> #include<string.h> # ...