思路:

设$sum[i]表示i的子树中a[i]的和$

$b[1]=\Sigma a[i]*dis[i] = \Sigma _{i=2} ^n sum[i]$

$b[x]-b[fa[x]]=sum[1]-2*sum[x]$

$sum[1]={\Sigma_{i=2}^n (b[x]-b[fa[x]])+2*b[1] \over n-1}$

$求出sum[1]以后根据a[x]=sum[x]-\Sigma_{v是x的儿子} sum[v]带入求出其它值即可$

$复杂度O(n)$

//By SiriusRen
#include <cstdio>
#include <cstring>
using namespace std;
#define int long long
const int N=;
int n,xx,yy,first[N],next[N],v[N],tot,fa[N],rev[N],cnt,b[N],X;
long long sum[N],ans[N];
void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}
void dfs(int x){
rev[++cnt]=x;
for(int i=first[x];~i;i=next[i])if(v[i]!=fa[x])
fa[v[i]]=x,dfs(v[i]);
}
void dfs2(int x){
ans[x]=sum[x];
for(int i=first[x];~i;i=next[i])if(v[i]!=fa[x])
dfs2(v[i]),ans[x]-=sum[v[i]];
}
signed main(){
memset(first,-,sizeof(first));
scanf("%lld",&n);
for(int i=;i<n;i++)scanf("%lld%lld",&xx,&yy),add(xx,yy),add(yy,xx);
for(int i=;i<=n;i++)scanf("%lld",&b[i]);
dfs();
for(int i=;i<=n;i++)sum[]+=(b[i]-b[fa[i]]);
sum[]=(sum[]+*b[])/(n-);
for(int i=;i<=n;i++)X=rev[i],sum[X]=(sum[]-b[X]+b[fa[X]])/;
dfs2();
for(int i=;i<=n;i++)printf("%lld%c",ans[i],i!=n?' ':'\n');
}

BZOJ 3727 DP?推式子..的更多相关文章

  1. [HAOI2007]分割矩阵 DP+推式子

    发现最近好少写博客啊(其实是各种摆去了) 更一点吧 这道题要求最小化均方差,其实凭直觉来说就是要使每个块分的比较均匀一点,但是单单想到想到这些还是不够的, 首先f[i][j][k][l][t]表示以( ...

  2. Codeforces 288E - Polo the Penguin and Lucky Numbers(数位 dp+推式子)

    题目传送门 似乎我的解法和官方题解不太一样 纪念自己独立做出来的一道难度 2800 的题. 我们记 \(ans(x)\) 为 \([444...44,x]\) 的答案,显然答案为 \(ans(r)-a ...

  3. HZOJ 20190727 T2 单(树上dp+乱搞?+乱推式子?+dfs?)

    考试T2,考试时想到了40pts解法,即对于求b数组,随便瞎搞一下就oxxk,求a的话,很明显的高斯消元,但考试时不会打+没开double挂成10pts(我真sb),感觉考试策略还是不够成熟,而且感觉 ...

  4. LOJ 3399 -「2020-2021 集训队作业」Communication Network(推式子+组合意义+树形 DP)

    题面传送门 一道推式子题. 首先列出柿子,\(ans=\sum\limits_{T_2}|T_1\cap T_2|·2^{T_1\cap T_2}\) 这个东西没法直接处理,不过注意到有一个柿子 \( ...

  5. bzoj 3157 && bzoj 3516 国王奇遇记——推式子

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...

  6. bzoj 3157 & bzoj 3516 国王奇遇记 —— 推式子

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...

  7. BZOJ 3453 - tyvj 1858 XLkxc(插值+推式子)

    题面传送门 首先根据我们刚学插值时学的理论知识,\(f(i)\) 是关于 \(i\) 的 \(k+1\) 次多项式.而 \(g(x)\) 是 \(f(x)\) 的前缀和,根据有限微积分那一套理论,\( ...

  8. bzoj 3622 DP + 容斥

    LINK 题意:给出n,k,有a,b两种值,a和b间互相配对,求$a>b$的配对组数-b>a的配对组数恰好等于k的情况有多少种. 思路:粗看会想这是道容斥组合题,但关键在于如何得到每个a[ ...

  9. sequence——强行推式子+组合意义

    sequence 考虑长度<=x的方案数F(x),然后(F(x)-F(x-1))*x贡献到答案里 n平方的做法可以直接DP, 感觉有式子可言, 就推出式子:类似coat,每个长度为i的计算i次. ...

随机推荐

  1. NFS指定端口,NFS缓存(转载)

    nfs服务端: #编辑/etc/nfsmount.conf,在末尾添加: #RQUOTAD_PORT=30001#LOCKD_TCPPORT=30002#LOCKD_UDPPORT=30002#MOU ...

  2. const浅析

    前言 c++中使用到const的地方有很多, 而且const 本身也针对不同的类型可能有不同的含义, 比如对指针就有顶层和底层. 本节就是探讨关于C++中const的在不同的地方不同表现或含义. co ...

  3. Scrapy实战:使用IDE工具运行爬虫

    一般我们运行爬虫程序都是使用命令行,比如:scrapy crwal sobook.不过这多少有些不方便,可以使用下面的方法使用IDE的方式运行爬虫 我这边使用的是pycharm软件,在pycharm里 ...

  4. 6.range filter进行范围过虑

    主要知识点 掌握range filter的用法     range filter就是查找一个范围内的数据,相当于sql中的betwen语法,以下是几个示例:     1.为帖子数据增加浏览量的字段   ...

  5. Codeforces 918C/917A - The Monster

    传送门:http://codeforces.com/contest/918/problem/C 一个括弧串由字符‘(’和‘)’组成.一个正确的串可被递归地定义,定义如下: ①空串e是一个正确的串: ② ...

  6. echarts demo

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. jQuery学习----简单介绍,基本使用,操作样式,动画

    jQuery简单介绍 jq是js的插件库,说白了,jq就是一个js文件 凡事能用jq实现的,js都能实现.但是js能实现的,jq不一定能够实现 jq的引入 http://www.bootcdn.cn ...

  8. poj 1273最大流dinic算法模板

    #include<stdio.h> #include<string.h> #define N 300 #define inf 0x7fffffff #include<qu ...

  9. 配置sublime text 前端环境

    SublimeLinter是Sublime的一个代码检测工具插件.安装前台是配置好node环境 1,在sublime text安装 SublimeLinter 按下 Ctrl+Shift+p 进入 C ...

  10. iptables防火墙原理详解+mysql pt工具

    http://seanlook.com/2014/02/23/iptables-understand/