题目大意:
  一个$n(n\le5\times10^5)$个点的树,每个点有一个权值$c_i$,从$1$出发进行欧拉遍历,每个单位时间移动一条边,记每个点$i$被访问到的时间是$t_i$,问最后$\max\{t_i+c_i\}$的最小值(点$1$算作最后访问)。

思路:
  $f[i]$表示欧拉遍历以$i$为根的子树的时间,$g[i]$表示对于以点$i$为根的子树中,对于每个点$j$,$\max\{t_j+c_j\}-t_i$的最小值。
  转移时考虑贪心,对于子结点$j$,$g[j]-f[j]$的值可以在遍历别的子树的过程中抵消掉,因此可以将子结点关于$g[j]-f[j]$降序排序并进行转移。最后答案即为$\max(g[1],f[1]+c_1)$。

 #include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return x;
}
const int N=;
int c[N],f[N],g[N];
std::vector<int> e[N];
inline void add_edge(const int &u,const int &v) {
e[u].push_back(v);
e[v].push_back(u);
}
inline bool cmp(const int &a,const int &b) {
return g[a]-f[a]>g[b]-f[b];
}
void dfs(const int &x,const int &par) {
for(unsigned i=;i<e[x].size();i++) {
const int &y=e[x][i];
if(y==par) continue;
dfs(y,x);
g[y]=std::max(g[y]+,f[y]+=);
}
std::sort(e[x].begin(),e[x].end(),cmp);
g[x]=c[x];
for(unsigned i=;i<e[x].size();i++) {
const int &y=e[x][i];
if(y==par) continue;
g[x]=std::max(g[x],f[x]+g[y]);
f[x]+=f[y];
}
}
int main() {
const int n=getint();
for(register int i=;i<=n;i++) c[i]=getint();
for(register int i=;i<n;i++) {
add_edge(getint(),getint());
}
dfs(,);
printf("%d\n",std::max(g[],f[]+c[]));
return ;
}

最新文章

  1. JS循环语句作业讲解(折纸、兔子生兔子、买东西组合)
  2. Egret 压缩与解压(jszip)
  3. [CLR via C#]9. 参数
  4. sublime text2 汉化
  5. Java 集合系列 11 hashmap 和 hashtable 的区别
  6. 快餐问题(dp好题)
  7. 在mac上搭建python环境
  8. 干货CentOS6.5_Nginx1.40_Php5.57_MySQL5.5.35编译安装全记录
  9. hibernate第二天
  10. AlarmManager(全局定时器/闹钟)详解
  11. css3部分整理
  12. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2版本正式发布
  13. React Fullpage
  14. LInux下几种定时器的比较和使用
  15. (一)java异常处理的几个问题
  16. DevExpress v18.2新版亮点——DevExtreme篇(四)
  17. visual studio发布到远程服务器的IIS
  18. jqgrid 单击行启用行编辑,切换行保存原编辑行
  19. Ubuntu 14.04 安装 DevStack与遇到的的问题记录
  20. 23种设计模式之备忘录模式(Memento)

热门文章

  1. Java系列学习说明
  2. Struts2 学习笔记
  3. web服务器集群session同步
  4. [洛谷P4389]付公主的背包
  5. [hdu6435]Problem J. CSGO
  6. 【CZY选讲&#183;棋盘迷宫】
  7. table隔行变色【转】
  8. es6+最佳入门实践(4)
  9. js,将日期时分秒等格式化和转化
  10. kali 开启smb