【算法】树型DP||树的重心(贪心)

【题解】

两遍DFS,第一次得到所有节点子树的路径和,第二次给出除了该子树外其它部分的路径和,时时计算答案。

long long!!!

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#define ll long long
using namespace std;
const int maxn=;
struct edge{int v,w,from;}e[maxn*];//边数组开大!
int first[maxn],tot,size[maxn],n,a[maxn],N;
ll f[maxn],g[maxn],ans; int read()
{
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
void insert(int u,int v,int w)
{tot++;e[tot].v=v;e[tot].w=w;e[tot].from=first[u];first[u]=tot;}
void dfs1(int x,int fa){
f[x]=;size[x]=a[x];
for(int i=first[x];i;i=e[i].from)if(e[i].v!=fa){
dfs1(e[i].v,x);
size[x]+=size[e[i].v];
g[e[i].v]=f[e[i].v]+1ll*size[e[i].v]*e[i].w;
f[x]+=g[e[i].v];
}
}
void dfs2(int x,int fa,ll num){
ans=min(ans,num+f[x]);
for(int i=first[x];i;i=e[i].from)if(e[i].v!=fa){
dfs2(e[i].v,x,num+f[x]-g[e[i].v]+1ll*(N-size[e[i].v])*e[i].w);
}
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)a[i]=read(),N+=a[i];
int u,v,w;
for(int i=;i<n;i++){
u=read();v=read();w=read();
insert(u,v,w);insert(v,u,w);
}
dfs1(,-);
ans=(1ll<<);
dfs2(,-,);
printf("%lld",ans);
return ;
}

令N为所有点权和。

先假设答案点在1,如果存在子树的size(点权和)>N/2,那么就有一半以上的点加边权,另外一些减边权,答案就会增加。

因为size越来越小,所以这样贪心一定正确。

然后这种操作实际上是就是在找树的重心(size算点权),因为树的重心就是满足所有子树size<N/2的点。

最新文章

  1. MySql的count统计结果
  2. Match:Blue Jeans(POJ 3080)
  3. 编写高质量JS代码的68个有效方法(五)
  4. 【leetcode❤python】172. Factorial Trailing Zeroes
  5. kappa 一致性系数计算实例
  6. SharePoint2013 SharePoint-Hosted 模式 分页方法
  7. [转载]MongoDB C# 驱动教程
  8. thinkPHP add、save无法添加、修改不起作用
  9. iphone 6s pp助手 越狱
  10. 老鸟都应该注意的git 提交规范
  11. Chapter 2 Open Book——30
  12. Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】
  13. C# Emgu 类型转换
  14. CodeForces - 777B Game of Credit Cards 贪心
  15. android的hwc浅析【转】
  16. sorted()排序详解
  17. Linux服务器配置---phpmyadmin
  18. mysql 出现的错误
  19. version 1.5.2-04 of the jvm is not suitable for this product. version:1.6 or greater is required
  20. python中函数作用域

热门文章

  1. FreeRTOS软件定时器的使用
  2. 「题目代码」P1013~P1017(Java)
  3. PowerDesigner 使用记录
  4. 序列化---fastjson使用
  5. Python 3基础教程32-正则
  6. 8.0 TochAction各种用法
  7. [USACO19JAN]Cow Poetry
  8. 成为IT精英,我奋斗7年【转】
  9. Mac上基于hexo+GitHub搭建个人博客(一)
  10. LaTex标准article文件框架解析