题目链接:Tree with Maximum Cost

题意:给定一棵树,树上每个顶点都有属性值ai,树的边权为1,求$\sum\limits_{i = 1}^{n} dist(i, v) \cdot a_i$,$dist(i, v) $为顶点i到顶点v的距离。该顶点v可以任意选择。

题解:O(n^2)的做法:从每个顶点跑一遍DFS,计算贡献值,并更新答案。(超时)

我们可以先计算出从顶点1跑的答案,发现顶点之间贡献的转移为$ans[u]=ans[fa]+(all-sum[u])-sum[u]$。(all为$\sum\limits_{i = 1}^{n} a_i$)

该顶点的上半部分贡献值增加(all-sum[u]),下半部分贡献值减少(sum[u])。

  1. #include <set>
  2. #include <map>
  3. #include <queue>
  4. #include <deque>
  5. #include <stack>
  6. #include <cmath>
  7. #include <cstdio>
  8. #include <vector>
  9. #include <string>
  10. #include <cstring>
  11. #include <fstream>
  12. #include <iostream>
  13. #include <algorithm>
  14. using namespace std;
  15.  
  16. #define eps 1e-8
  17. #define pb push_back
  18. #define PI acos(-1.0)
  19. #define INF 0x3f3f3f3f
  20. #define clr(a,b) memset(a,b,sizeof(a)
  21. #define bugc(_) cerr << (#_) << " = " << (_) << endl
  22. #define FAST_IO ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
  23.  
  24. const int N=2e5+;
  25. typedef long long ll;
  26. typedef unsigned long long ull;
  27. ll a[N],sum[N],res,cnt,ans[N];
  28.  
  29. vector <int> E[N];
  30.  
  31. void dfs(int u,int fa,ll len){
  32. res+=len*a[u];
  33. sum[u]=a[u];
  34. for(int i=;i<E[u].size();i++){
  35. int v=E[u][i];
  36. if(v==fa) continue;
  37. dfs(v,u,len+);
  38. sum[u]+=sum[v];
  39. }
  40. }
  41.  
  42. void DFS(int u,int fa){
  43. if(fa!=) ans[u]=ans[fa]+cnt-*sum[u];
  44. for(int i=;i<E[u].size();i++){
  45. int v=E[u][i];
  46. if(v==fa) continue;
  47. DFS(v,u);
  48. }
  49. }
  50.  
  51. int main(){
  52. FAST_IO;
  53. int n;
  54. cin>>n;
  55. for(int i=;i<=n;i++) cin>>a[i],cnt+=a[i];
  56. for(int i=;i<n;i++){
  57. int u,v;
  58. cin>>u>>v;
  59. E[u].push_back(v);
  60. E[v].push_back(u);
  61. }
  62. dfs(,,);
  63. ans[]=res;
  64. DFS(,);
  65. cout<<*max_element(ans+,ans++n)<<endl;
  66. return ;
  67. }

Codeforces 1092F Tree with Maximum Cost(树形DP)的更多相关文章

  1. Codeforces Round #527 F - Tree with Maximum Cost /// 树形DP

    题目大意: 给定一棵树 每个点都有点权 每条边的长度都为1 树上一点到另一点的距离为最短路经过的边的长度总和 树上一点到另一点的花费为距离乘另一点的点权 选定一点出发 使得其他点到该点的花费总和是最大 ...

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

  3. 2018.12.19 codeforces 1092F. Tree with Maximum Cost(换根dp)

    传送门 sbsbsb树形dpdpdp题. 题意简述:给出一棵边权为1的树,允许选任意一个点vvv为根,求∑i=1ndist(i,v)∗ai\sum_{i=1}^ndist(i,v)*a_i∑i=1n​ ...

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

  5. CF1092 --- Tree with Maximum Cost

    CF1324 --- Maximum White Subtree 题干 You are given a tree consisting exactly of \(n\) vertices. Tree ...

  6. Codeforces 671D. Roads in Yusland(树形DP+线段树)

    调了半天居然还能是线段树写错了,药丸 这题大概是类似一个树形DP的东西.设$dp[i]$为修完i这棵子树的最小代价,假设当前点为$x$,但是转移的时候我们不知道子节点到底有没有一条越过$x$的路.如果 ...

  7. Codeforces 219D - Choosing Capital for Treeland(树形dp)

    http://codeforces.com/problemset/problem/219/D 题意 给一颗树但边是单向边,求至少旋转多少条单向边的方向,可以使得树上有一点可以到达树上任意一点,若有多个 ...

  8. codeforces 633F The Chocolate Spree (树形dp)

    题目链接:http://codeforces.com/problemset/problem/633/F 题解:看起来很像是树形dp其实就是单纯的树上递归,就是挺难想到的. 显然要求最优解肯定是取最大的 ...

  9. codeforces 486 D. Valid Sets(树形dp)

    题目链接:http://codeforces.com/contest/486/problem/D 题意:给出n个点,还有n-1条边的信息,问这些点共能构成几棵满足要求的树,构成树的条件是. 1)首先这 ...

随机推荐

  1. mysql 设置自增主键id的起始值

    修改user表,主键自增从20000开始 alter table user AUTO_INCREMENT=20000;

  2. 20190409-层叠の层叠上下文、层叠水平、层叠顺序、z-index、伪元素层叠

    写在前面乱七八糟的前言: 此"八卦"的源于,在写下图这个圆滚滚的导航布局时,使用元素及其伪元素加上绝对定位完成,但遇到:before或:after伪元素与元素的层叠顺序,就是伪元素 ...

  3. 森林防火应急指挥GIS系统森林防火监测预警系统

    森林防火监测预警与应急管理三维系统含日常业务管理.物资设备管理.火情定位.火情短信平台.应急预案管理.辅助决策等功能模块.该平台可便捷集成手机等移动端,可实时查看现场视频图像.定位火场人员,实现可视化 ...

  4. citrix外企,鸡鸣寺,玄武湖环跑,七牛云笔试

    笔记汇总,计算机网络笔记汇总 昨天下江宁,经历了人生第一场f2f面试,外企,citrix思杰:(准备好久都英文介绍没用上sad) 全程一个半小时,最后被面试官夸是面过人中,对计算机网络理解最多的(希望 ...

  5. Python安装第三方包(模块/工具)出现链接超时,网速慢,安装不上的问题如何解决

    之前我的电脑重新装了系统以后,发现安装完Python后, 使用pip linstall 安装第三方包的时候,网速慢的一匹 有时候只有几百b/s ,而且还动不动就会出现无法安装,链接超时等问题. 今天我 ...

  6. 【Linux】【MySQL】CentOS7、MySQL8.0.13 骚操作速查笔记——专治各种忘词水土不服

    1.前言 [Linux][MySQL]CentOS7安装最新版MySQL8.0.13(最新版MySQL从安装到运行) 专治各种忘词,各种水土不服. - -,就是一个健忘贵的速查表:(当然不包括SQL的 ...

  7. 城市经纬度 json

    [ { "name": "北京市", "log": "116.46", "lat": "3 ...

  8. [20190423]简单测试latch nowilling等待模式.txt

    [20190423]简单测试latch nowilling等待模式.txt --//我对这个问题的理解就是如果参数willing=0,表示无法获取该latch,直接退出,再寻找类似的latch.--/ ...

  9. HDU 6152 - Friend-Graph

    Friend-Graph Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  10. ztree 为节点添加点击触发事件

    <SCRIPT type="text/javascript"> var setting = { data : { key : { title : "code& ...