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 题意: 输入 ...
随机推荐
- Haproxy+Percona-XtraDB-Cluster 集群
Haproxy介绍 Haproxy 是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用 ...
- 力扣算法——134GasStation【M】
在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升. 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升.你从其中的一个加 ...
- sql server 与 oracle的区别(转)
--1.数据类型不同. --sql server 的数据类型:int ,smallint ,char,varchar,nchar,nvarchar,ntext,datetime,smalld ...
- php学习笔记(初学者入门)
<?php其他 isset() 变量是否存在 boolean empty() 检查变量是否存在,并判断值是否为非空或非0 void unset() 销毁变量 header('Content-Ty ...
- 使用pip 时报错 Fatal error in launcher: Unable to create process using '"D:\pytghon2.7\python.exe" "D:\python2.7\S
无法创建使用pip.exe创建进程,说白了就是无法启动pip安装插件. 解决方法升级pip: python -m pip install -U pip
- spring 注入bean的两种方式
我们都知道,使用spring框架时,不用再使用new来实例化对象了,直接可以通过spring容器来注入即可. 而注入bean有两种方式: 一种是通过XML来配置的,分别有属性注入.构造函数注入和工厂方 ...
- aiohttp上报405: Method Not Allowed
请求方式不对,修改为“POST”或者“GET” 可参考:https://blog.csdn.net/yiifaa/article/details/80928487
- ionic3 图片(轮播)预览 ionic-gallary-modal组件使用方法
一.效果展示 使用方法: 1.npm安装ionic-gallary-modal扩展模块 npm install ionic-gallery-modal --save 2.在app.module.ts根 ...
- ionic3.0 alipay-base插件移除后会添加多余的链接文件在nodes-modules中,导致再安装其他插件或移除插件时报错问题
1.报错截图: 2.如图因为nodes-module 文件夹中有多余的链接文件导致报错. 3.解决方法:将该链接文件删除即可.
- Android Service完全解析(上)
转载:http://blog.csdn.net/guolin_blog/article/details/11952435 相信大多数朋友对Service这个名词都不会陌生,没错,一个老练的Androi ...