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(i,j)为iii到jjj的距离。
思路:题解还是好看啊 先从1开始搜,预处理出当1为根的时候的答案记为resresres,递归的过程中假设当前节点为iii,那么sum[i]sum[i]sum[i]数组的意义就是:从以当前顶点为根的所有子树的所有节点的权值和记为sum[i]sum[i]sum[i]。
预处理完成之后就是题解中神奇的re-rooting(换根)。 还是从1开始递归,假设当前根为vvv,他的一个子节点为tototo,那么v−>tov->tov−>to就是一个换根过程,需要做一下转变,类似于莫队的转移 ,首先由于根的变化,之前v到nownownow的某个子节点的距离是x+1x+1x+1的话,那么nownownow为根的时候这个距离就是xxx了。resresres就要减去sum[k],sum[v]sum[k],sum[v]sum[k],sum[v]也要减去sum[k]sum[k]sum[k],相应当,to经过nowto经过nowto经过now才能到的节点的到根的距离就要加1,res就要加上sum[v],sum[k]也要加上sum[v]res就要加上sum[v],sum[k]也要加上sum[v]res就要加上sum[v],sum[k]也要加上sum[v],然后记得回溯就行了。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mp make_pair
#define pb push_back
using namespace std;
LL gcd(LL a,LL b){return b?gcd(b,a%b):a;}
LL lcm(LL a,LL b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b,LL MOD){LL ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
const int N =2e5+232;
int n,a[N];
vector<int>v[N];
LL sum[N],res,ans;
void dfs1(int now,int pre=-1,int h=0){
LL ans=0;
res+=1ll*h*a[now];
sum[now]=a[now];
for(auto k:v[now]){
if(k==pre)continue;
dfs1(k,now,h+1);
sum[now]+=sum[k];
}
}
void dfs2(int now,int p=-1){
ans=max(ans,res);
for(auto k:v[now]){
if(k==p)continue;
res-=sum[k];
sum[now]-=sum[k];
res+=sum[now];
sum[k]+=sum[now];
dfs2(k,now);
sum[k]-=sum[now];
res-=sum[now];
sum[now]+=sum[k];
res+=sum[k];
}
}
int main(){
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<n;i++){
int s,t;
cin>>s>>t;
v[s].pb(t);
v[t].pb(s);
}
dfs1(1);
dfs2(1);
cout<<ans;
return 0;
}
Codeforces Round #527 (Div. 3) . F Tree with Maximum Cost的更多相关文章
- 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 #499 (Div. 1) F. Tree
Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...
- Codeforces Round #527 (Div. 3)F(DFS,DP)
#include<bits/stdc++.h>using namespace std;const int N=200005;int n,A[N];long long Mx,tot,S[N] ...
- Codeforces Round #527 (Div. 3) ABCDEF题解
Codeforces Round #527 (Div. 3) 题解 题目总链接:https://codeforces.com/contest/1092 A. Uniform String 题意: 输入 ...
- Codeforces Round #485 (Div. 2) F. AND Graph
Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...
- Codeforces Round #486 (Div. 3) F. Rain and Umbrellas
Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...
- Codeforces Round #501 (Div. 3) F. Bracket Substring
题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...
- Codeforces Round #527 (Div. 3)
一场div3... 由于不计rating,所以打的比较浪,zhy直接开了个小号来掉分,于是他AK做出来了许多神仙题,但是在每一个程序里都是这么写的: 但是..sbzhy每题交了两次,第一遍都是对的,结 ...
- Codeforces Round #375 (Div. 2) F. st-Spanning Tree 生成树
F. st-Spanning Tree 题目连接: http://codeforces.com/contest/723/problem/F Description You are given an u ...
随机推荐
- Linux安装python2.7
一.Python安装 以Python-2.7.7为例,安装包:Python-2.7.7.tgz如无特殊说明,以下安装步骤都采用root用户执行 1. 解压Python-2.7.7.tgz tar -x ...
- nohup ./startWebLogic.sh >out.log 2>&1 & 解析
在启动weblogic的时候我们经常看到如下的命令: nohup ./startWebLogic.sh >out.log 2>&1 & 从09年开始用weblogic到现在 ...
- 【转】JSON.parse() Unexpected token i in JSON at position 2 报错问题
JSON.parse(): Unexpected token i in JSON at position 2 报错问题 错误代码: var res = "[{id:1,name:'limin ...
- canvas如何自适应屏幕大小
可以用JS监控屏幕大小,然后调整Canvas的大小.在代码中加入JS $(window).resize(resizeCanvas); function resizeCanvas() { ...
- 26 python 初学(线程、同步锁、死锁和递归锁)
参考博客: www.cnblogs.com/yuanchenqi/articles/5733873.html 并发:一段时间内做一些事情 并行:同时做多件事情 线程是操作系统能够进行运算调度的基本单位 ...
- let声明
<script> /** * es6 let 练习 * 生效范围:块级代码代码内. */ // { // let a=2; // var c=2; // } // console.log( ...
- 工具篇-Spark-Streaming获取kafka数据的两种方式(转载)
转载自:https://blog.csdn.net/weixin_41615494/article/details/7952173 一.基于Receiver的方式 原理 Receiver从Kafka中 ...
- python 通过 http、dns、icmp判断网络状态
#http使用requests发包bs4解析,dns.icmp 使用scapy发包import time import threading import requests,bs4 from scapy ...
- Reachability from the Capital CodeForces - 999E (强连通)
There are nn cities and mm roads in Berland. Each road connects a pair of cities. The roads in Berla ...
- Java泛型中<? extends E>和<? super E>的区别
这篇文章谈一谈Java泛型声明<? extends E>和<? super E>的作用和区别 <? extends E> <? extends E> 是 ...