[Poi2014]FarmCraft

题目

mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子。
mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒软件,第i个妹子安装时间为Ci。
树上的每条边mhy能且仅能走两次,每次耗费1单位时间。mhy送完所有电脑后会回自己家里然后开始装zhx牌杀毒软件。
卸货和装电脑是不需要时间的。
求所有妹子和mhy都装好zhx牌杀毒软件的最短时间。

INPUT

第一行输入一个整数N,表示有N个结点
第二行有N个整数C1,C2...Cn,Ci表示第i个妹子安装杀毒软件的时间
接下来的N-1行,每行两个整数x,y,表示x与y之间有一条无向边

OUTPUT

输出文件仅包含一行,一个整数表示让所有妹子和mhy装好杀毒软件的最短时间

SAMPLE

INPUT

6
1 8 9 6 3 2
1 3
2 3
3 4
4 5
4 6

OUTPUT

11

解题报告

翻译真累= =,原题英文版,结果发现翻译跟英文啥关系没有,就粘了翻译,然后发现输入格式跟输出格式都没有翻译,然后= =,然后我就强行翻译了一发= =
考试时打了个dfs,骗了5分- -
正解:
贪心。
我们分析题干,发现每条边只能过两次,也就是一进一出,那么我们进了一个点,我们就要遍历完整个子树,所以我们只能跑一遍dfs,然后我们发现dfs一遍的时间是一定的,那么见每个妹子的时间就在这个时间轴上。
我们定义一个数组rest,代表遍历完这个节店的子树,以后我们还要为这个节点所费的时间。
1. 除了1节点,见到一个妹子杀一下毒
2. 我们发现答案是Max(rest[1],c[1])+2×(n-1)
3. 我们考虑如何找rest,我们发现,每个节点的最优rest是 子节点的rest,减去其在这个子树里又经过的时间 再和 它的c减去遍历它的时间 取个Max
 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
inline int read(){
int sum();
char ch(getchar());
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';sum=sum*+(ch^),ch=getchar());
return sum;
}
int n;
int w[];
int fa[],t[],rest[];
inline int my_max(int a,int b){
return a>b?a:b;
}
inline int my_min(int a,int b){
return a<b?a:b;
}
vector<int>g[];
inline bool cmp(const int &a,const int &b){
return rest[a]>rest[b];
}
inline void dfs(int u){
int size(g[u].size());
for(int i=;i<size;i++){
int e(g[u][i]);
if(e!=fa[u]){
t[u]++;
fa[e]=u;
dfs(e);
t[u]++;
t[u]+=t[e];
}
}
if(u!=)
rest[u]=w[u]-t[u];
int tmp(t[u]);
sort(g[u].begin(),g[u].end(),cmp);
for(int i=;i<size;i++){
int e(g[u][i]);
if(e!=fa[u]){
tmp-=+t[e];
rest[u]=my_max(rest[u],rest[e]-tmp-);
}
}
rest[u]=my_max(,rest[u]);
// cout<<u<<' '<<w[u]<<' '<<rest[u]<<endl;
}
int main(){
n=read();
for(int i=;i<=n;i++)
w[i]=read();
for(int i=;i<n;i++){
int x(read()),y(read());
g[x].push_back(y),g[y].push_back(x);
}
dfs();
printf("%d",my_max(rest[],w[])+(n<<)-);
}

[补档][Poi2014]FarmCraft的更多相关文章

  1. [BZOJ 3829][POI2014] FarmCraft

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

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

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

  3. STL 补档

    STL 补档 1.vector 作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据. vector在C++标准模板库中的部分内容,它是 ...

  4. 图论补档——KM算法+稳定婚姻问题

    突然发现考前复习图论的时候直接把 KM 和 稳定婚姻 给跳了--emmm 结果现在刷训练指南就疯狂补档.QAQ. KM算法--二分图最大带权匹配 提出问题 (不严谨定义,理解即可) 二分图 定义:将点 ...

  5. [补档] 大假期集训Part.1

    新博客搭起来先补一发档... 那就从大假期集训第一部分说起好了QwQ 自己还是太菜掉回了2016级水平 day1: day1的时候来得有点晚(毕竟准高一)然后进机房发现早就开考了还没有给我题面于是搞了 ...

  6. 软件安装配置笔记(三)——ArcGIS系列产品安装与配置(补档)(附数据库连接及数据导入)

    在前两篇安装配置笔记之后,就忘记把其他安装配置笔记迁移过来了,真是失误失误!趁现在其他文档需要赶紧补上. 目录: 一.ArcMap 二.ArcMap连接数据库并导入数据 三.Arcgis Pro 四. ...

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

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

  8. 补档 Codeblocks下的文件标题栏(标签)显示方法

    可能在以下链接也能看到这篇文档 我知道很多人都不知道这个到底叫啥,还不如直接一点: 文件标题栏 就是如下的效果. 解决办法: 在左上角第三个view下,打开后取消Hide editor tabs 选项 ...

  9. 【bzoj3829】[Poi2014]FarmCraft 贪心

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

随机推荐

  1. Linux 程序,进程和线程

    进程如何使用内存. 当程序文件运行为进程时, 进程在内存中获得空间. 1) Text : 固定大小 存储指令(instruction), 说明每一步的操作. 2) Global Data : 固定大小 ...

  2. WPF的一些感悟

    第一天在博客园写东西,只写一些自己对WPF稚嫩的理解和感悟. 1.Code Snippet代码简写工具 可以创建自己的代码模板管理器——>>>工具菜单,代码片段管理器 考出现有的+更 ...

  3. 【解决】VS2013 + Qt 5.7(5.6适用)使用QSqlDatabase出现“无法解析的外部符号"错误

    原始日期: 2016-08-03 22:09  错误如下: error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscal ...

  4. 常用PHP函数的封装

    PHP获取文件扩展名(后缀) function getExtension($filename){ $myext = substr($filename, strrpos($filename, '.')) ...

  5. VMware中Mac OS中显示共享文件夹的方法

    在finder 偏好设置里的通用标签下,勾选  “已连接的服务器”

  6. 关于 静态页面布局 中的一些BUG

    作为一枚初级程序猿,难免在制作静态页面时会遇到一些BUG,在此,我从网上找了一些资料并且结合自己的项目开发经验,总结了一些在静态页面布局时可能会遇到的问题,希望能对初级程序猿有一定的帮助(资料请参考: ...

  7. 在使用<script>嵌入JavaScript代码时,不要在代码中的任何地方出现"</script>"字符串

    在使用<script>嵌入JavaScript代码时,记住不要在代码中的任何地方出现"</script>"字符串.例如浏览器执行下面代码会报错: <s ...

  8. Threejs 开发3D地图实践总结

    前段时间连续上了一个月班,加班加点完成了一个3D攻坚项目.也算是由传统web转型到webgl图形学开发中,坑不少,做了一下总结分享. 1.法向量问题 法线是垂直于我们想要照亮的物体表面的向量.法线代表 ...

  9. CSS学习(页外引用还不懂)

    CSS的语法结构为   选择符 {属性:值:}    Selector {Property : Value:} 选择符:通配 *{....}  , 元素  body{....} .h1{....}.p ...

  10. Unreal Engine 4 Radiant UI 入门教程(零)在场景中摆放网页

    相关的学习资源: https://forums.unrealengine.com/showthread.php?12097-PLUGIN-RadiantUI-SDK-UIs-HUDs-Interact ...