Codeforces Round #527 F - Tree with Maximum Cost /// 树形DP
题目大意:
给定一棵树 每个点都有点权 每条边的长度都为1
树上一点到另一点的距离为最短路经过的边的长度总和
树上一点到另一点的花费为距离乘另一点的点权
选定一点出发 使得其他点到该点的花费总和是最大的
先dfs一遍 获得 s[u] 为u点往下的点权总和(包括u点)
由其子节点v及其本身权值可得 s[u]=s[v]+w[u]
获得 dp[u] 为u点出发往下的花费总和(u点出发的花费不需要包括u点)
由其子节点v的dp[v]及s[v]可得 dp[u]=dp[v]+s[v]
再深搜一遍树形dp 获得 dp[u] 为u点出发到其他所有点的花费总和

此时 fa=1 u=5
dp[fa]=dp[9]=1*(7+10+4)+2*(1+6+5+1)=(1+6+5)*2+(7+4+10)*1+1*2
dp[u]=dp[5]=1*(1+6+5+9)+2*(7+4)+3*1=(1+6+5)*1+9*1+(7+4)*2+1*3
发现由fa的结果得到u的结果需要 加上u往上的值 再减去u往下(包括u)的值
相当于 加上整棵树的值sum 再减两次u往下的值s[u] 即dp[u] = dp[fa] + sum - 2*s[u]
dp[fa]+sum-2*s[u] =(1+6+5)*2+(7+4+10)*1+1*2 + (1+6+5+7+4+10+9+1) - 2*(10+1+6+5)
=(1+6+5)*3+(7+4+10)*2+1*3+9 - 2*(10+1+6+5)
=(1+6+5)*1+(7+4)*2+1*3+9*1 = dp[u]
#include <bits/stdc++.h>
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
const int N=2e5+;
LL n, w[N];
LL ans, sum;
LL s[N], dp[N];
// s[u]为u点往下的点的权值总和
vector <int> E[N]; void dfs2(int u,int fa) {
if(fa) dp[u]=dp[fa]+sum-*s[u];
// 如果u存在父节点 由dp[fa]可得到dp[u]
// 此时dp[u]为由u点出发去往其他所有点的总花费
for(int i=;i<E[u].size();i++) {
int v=E[u][i];
if(v==fa) continue;
dfs2(v,u);
}
ans=max(ans,dp[u]);
}
void dfs1(int u,int fa) {
s[u]=w[u];
for(int i=;i<E[u].size();i++) {
int v=E[u][i];
if(v==fa) continue;
dfs1(v,u);
s[u]+=s[v];
dp[u]=dp[u]+dp[v]+s[v];
// 此时dp[u]为由u点出发往下的总花费
}
} int main()
{
while(~scanf("%I64d",&n)) {
ans=sum=0LL;
for(int i=;i<=n;i++) {
scanf("%I64d",&w[i]);
sum+=w[i]; E[i].clear();
}
for(int i=;i<n;i++) {
int u,v; scanf("%d%d",&u,&v);
E[u].push_back(v);
E[v].push_back(u);
}
memset(s,,sizeof(s));
memset(dp,,sizeof(dp));
dfs1(,); dfs2(,);
printf("%I64d\n",ans);
} return ;
}
Codeforces Round #527 F - Tree with Maximum Cost /// 树形DP的更多相关文章
- CF F - Tree with Maximum Cost (树形DP)给出你一颗带点权的树,dist(i, j)的值为节点i到j的距离乘上节点j的权值,让你任意找一个节点v,使得dist(v, i) (1 < i < n)的和最大。输出最大的值。
题目意思: 给出你一颗带点权的树,dist(i, j)的值为节点i到j的距离乘上节点j的权值,让你任意找一个节点v,使得dist(v, i) (1 < i < n)的和最大.输出最大的值. ...
- Codeforces Round #527 (Div. 3) F. Tree with Maximum Cost 【DFS换根 || 树形dp】
传送门:http://codeforces.com/contest/1092/problem/F F. Tree with Maximum Cost time limit per test 2 sec ...
- Codeforces Round #221 (Div. 1) B. Maximum Submatrix 2 dp排序
B. Maximum Submatrix 2 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...
- CodeCraft-19 and Codeforces Round #537 (Div. 2) E 虚树 + 树形dp(新坑)
https://codeforces.com/contest/1111/problem/E 题意 一颗有n个点的树,有q个询问,每次从树挑出k个点,问将这k个点分成m组,需要保证在同一组中不存在一个点 ...
- Codeforces Round #527 (Div. 3) . F Tree with Maximum Cost
题目链接 题意:给你一棵树,让你找一个顶点iii,使得这个点的∑dis(i,j)∗a[j]\sum dis(i,j)*a[j]∑dis(i,j)∗a[j]最大.dis(i,j)dis(i,j)dis( ...
- Codeforces 1092 F Tree with Maximum Cost (换根 + dfs)
题意: 给你一棵无根树,每个节点有个权值$a_i$,指定一个点u,定义$\displaystyle value = \sum^v a_i*dist(u,v)$,求value的最大值 n,ai<= ...
- Educational Codeforces Round 58 (Rated for Div. 2) D 树形dp + 数学
https://codeforces.com/contest/1101/problem/D 题意 一颗n个点的树,找出一条gcd>1的最长链,输出长度 题解 容易想到从自底向长转移 因为只需要g ...
- Codeforces Round #302 (Div. 1) D - Road Improvement 树形dp
D - Road Improvemen 思路:0没有逆元!!!! 不能直接除,要求前缀积和后缀积!!! #include<bits/stdc++.h> #define LL long lo ...
- Codeforces Round #527 (Div. 3) ABCDEF题解
Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ...
随机推荐
- mvnw简介
- elasticsearch-6.0.1安装
elasticsearch-6.0.1安装 0. 介绍: ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎:是目前全文搜索引擎的首选. ...
- LLppdd's class meeting!
LLppdd's class meeting! Time Limit: 1 s Memory Limit: 256 MB 题目背景 LLppdd 有一个可爱团结的班级,他们会定期举行班会活动...比如 ...
- vps被封逃逸_v2+cloudflare+websocket+tls+nginx
每逢重大节日,总有那么一大部分vps凉凉,以下为能正经正常使用vps,无奈之举,此法由于多层代理,夜间速度会有影响,白天感受不明显. 由于博客园内容审查,v2_ray 中间的 下划线为分隔符,相关链接 ...
- Python【外】第一节 map()和匿名函数的配合使用
Python[外]第一节 map()和匿名函数的配合使用 map()函数 map函数使用语法如下:map(fun, iterable, ...) 功能: map() 会根据提供的函数fun对指定序列i ...
- scss定义全局变量引入sass-resources-loader报错
开发jquery多页应用,引入sass-resources-loader后报 Make sure 'options.resources' is String or Array of Strings. ...
- MyEclipse中android 项目如何解决第三方jar无法关联源码的问题( The JAR of this class file belongs to container 'Android Private Libraries' which does not allow modifications to source attachments on its entries.)
若我们要为第三方jar(android-support-v4.jar)关联源码通常的做法是 右键项目 单击菜单Properties 单击菜单 Java Build Path 单击 Libraries ...
- 【leetcode】388. Longest Absolute File Path
题目如下: Suppose we abstract our file system by a string in the following manner: The string "dir\ ...
- springcloud笔记一
微服务的概述 什么是微服务? 现今微服务界没有一个统一的.标准的定义 微服务化的核心就是将统一的一站式应用,根据业务拆分成一个一个的服务,彻底的去耦合,每一个微服务提供单个业务功能的服务,一个服务做一 ...
- 深入理解Magento-第九章-修改、扩展、重写Magento代码
(博主提示:本章应该不是原作者的第九章,仅作补充和参考) 作为一个开发者的你,肯定要修改Magento代码去适应你的业务需求,但是在很多时候我们不希望修改Magento的核心代码,这里有很多原因,例如 ...