题目大意:

给定一棵树 每个点都有点权 每条边的长度都为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的更多相关文章

  1. 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)的和最大.输出最大的值. ...

  2. 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 ...

  3. 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 ...

  4. CodeCraft-19 and Codeforces Round #537 (Div. 2) E 虚树 + 树形dp(新坑)

    https://codeforces.com/contest/1111/problem/E 题意 一颗有n个点的树,有q个询问,每次从树挑出k个点,问将这k个点分成m组,需要保证在同一组中不存在一个点 ...

  5. 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( ...

  6. Codeforces 1092 F Tree with Maximum Cost (换根 + dfs)

    题意: 给你一棵无根树,每个节点有个权值$a_i$,指定一个点u,定义$\displaystyle value = \sum^v a_i*dist(u,v)$,求value的最大值 n,ai<= ...

  7. Educational Codeforces Round 58 (Rated for Div. 2) D 树形dp + 数学

    https://codeforces.com/contest/1101/problem/D 题意 一颗n个点的树,找出一条gcd>1的最长链,输出长度 题解 容易想到从自底向长转移 因为只需要g ...

  8. Codeforces Round #302 (Div. 1) D - Road Improvement 树形dp

    D - Road Improvemen 思路:0没有逆元!!!! 不能直接除,要求前缀积和后缀积!!! #include<bits/stdc++.h> #define LL long lo ...

  9. Codeforces Round #527 (Div. 3) ABCDEF题解

    Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ...

随机推荐

  1. 4.Jmeter 快速入门教程(三-2) -- 设置集结点

    集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点, 还拿那个用户和密码的地方,每到输入用户 ...

  2. Module not found: Error: Can't resolve '@babel/runtime/helpers/classCallCheck' and Module not found: Error: Can't resolve '@babel/runtime/helpers/defineProperty'

    These two mistakes are really just one mistake, This is because the following file @babel/runtime ca ...

  3. 基于MFC的Media Player播放器的制作(4---功能实现代码)

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. PandaPlayerDlg.h // PandaPlayerDlg.h : header file // //{{AFX_INCLUDE ...

  4. nginx+tomcat负载均衡实验

    导言: 本次实验,tomcat就直接使用录原生的主页,只是简单修改主页识别主机,nginx也是直接在欢迎页上面修改的,直接实现负载均衡. 主机1:192.168.100.156 nginx+tomca ...

  5. webservice的使用-axis1-01

    1.搭建axis服务器 1.1 下载axis-bin-1_4.zip文件并解压 1.2 拷贝\axis-1_4\webapps目录下的axis到tomcat目录下的webapps目录下并启动 1.3 ...

  6. log4j 和 log4j2 在springboot中的性能对比

    文章链接: https://pengcheng.site/2019/11/17/log4j-he-log4j2-zai-springboot-zhong-de-xing-neng-dui-bi/ 前言 ...

  7. spring security 学习三-rememberMe

    功能:登录时的“记住我”功能 原理: rememberMeAuthenticationFilter在security过滤器链中的位置,在请求走认证流程是,当前边的filter都不通过时,会走remem ...

  8. cenos7 下数据库相关操作

    1.Linux Centos7下如何确认MySQL服务已经启动 https://www.cnblogs.com/qianzf/p/7082484.html 2.CentOS 7上安装MySQL并配置远 ...

  9. Tips using Manjaro

    Set swappiness value The default swappiness value is set 60 as you can check it via the following co ...

  10. 笔记62 Spring Boot快速入门(二)

    SpringBoot部署 一.jar方式 1.首先安装maven. <1>下载最新的maven版本:https://maven.apache.org/download.cgi <2& ...