正题

题目链接:https://jzoj.net/senior/#main/show/3844


题目大意

一棵树,求每条路径的点权乘积之和。


解题思路

若只考虑从xxx出发往子树的路径,那么有fx=ax+ax∗∑x−>yfyf_x=a_x+a_x*\sum_{x->y}f_yfx​=ax​+ax​∗x−>y∑​fy​

定义gig_igi​为从iii开始的路径乘积和

但是要考虑往上又往下的,我们考虑换根法,那么我们对于每个ax∗∑x−>yfya_x*\sum_{x->y}f_yax​∗∑x−>y​fy​相当于要求出父节点的fyf_yfy​,其实就是gfa−fx∗axg_{fa}-f_x*a_xgfa​−fx​∗ax​。但是这样我们求出来的答案会有重复,我们考虑从父节点的ffaf_{fa}ffa​入手,我们只要让新枚举到的数传下去的fxf_xfx​是之前累计的减去即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int XJQ=10086,N=110000;
struct node{int to,next;
}a[N*2];
int n,w[N],ls[N],tot,f[N],g[N],ans;
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void dp(int x,int fa)
{for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa) continue;dp(y,x);f[x]=(f[x]+f[y])%XJQ;}f[x]=(f[x]*w[x]%XJQ+w[x])%XJQ;
}
void cr(int x,int fa,int z)
{if(x!=1)g[x]=(f[x]+z*w[x]%XJQ)%XJQ;int sum=w[x];for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa) continue;sum=(sum+f[y]*w[x]%XJQ)%XJQ;cr(y,x,(g[x]-sum+XJQ)%XJQ);}ans=(ans+g[x])%XJQ;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&w[i]),w[i]%=XJQ;for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}dp(1,1);g[1]=f[1];cr(1,1,1);printf("%d",ans);
}

jzoj3844-统计损失【树形dp,换根法】相关推荐

  1. P4284-[SHOI2014]概率充电器【树形dp,换根法,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/P4284 题目大意 nnn个点的一棵树,每个点有pip_ipi​概率通电,每个边有一定概率可以导电.求期望有电的节点 ...

  2. P4827-[国家集训队]Crash 的文明世界【树形dp,换根法,斯特林数】

    正题 题目链接:https://www.luogu.com.cn/problem/P4827 题目大意 一颗nnn个点的树,定义dis(i,j)dis(i,j)dis(i,j)表示树上i,ji,ji, ...

  3. 『树形DP·换根法』Accumulation Degree

    题目描述 有一个树形的水系,由 N-1 条河道和 N 个交叉点组成. 我们可以把交叉点看作树中的节点,编号为 1~N,河道则看作树中的无向边. 每条河道都有一个容量,连接 x 与 y 的河道的容量记为 ...

  4. bzoj 3743 [Coci2015]Kamp——树形dp+换根

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3743 树形dp+换根. "从根出发又回到根" 减去 "mx & ...

  5. Educational Codeforces Round 67 (Rated for Div. 2)(D思维题 线段树/E树形dp(换根dp) 二次扫描与换根法)

    心得 D写了个假算法被hack了wtcl- E据涛神说是二次扫描与换根法,看了看好像和树形dp差不多 F概率dp G费用流 回头再补 思路来源 马老师 归神 贤神等代码 http://www.mami ...

  6. [BZOJ3677/UOJ#105][APIO2014]Beads and wires 连珠线(树形dp+换根)

    Address https://www.lydsy.com/JudgeOnline/problem.php?id=3677 http://uoj.ac/problem/105 Solution 考虑一 ...

  7. 最大疯子树-树形dp+换根+二次扫描

    分析: 疯子树肯定还是一棵树. 所以,所谓的最短路径就是吓唬你的,树上两点之间有且只有一条路径. b1和b2必须是相邻的,否则不可能是一棵疯子树. 再想一想,用同样的方式构造剩下的点的话,那么可以得到 ...

  8. [题解](树形dp/换根)小x游世界树

    2. 小x游世界树 (yggdrasi.pas/c/cpp) [问题描述] 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当 ...

  9. nssl1163-小x游世界树【树形dp,二次扫描和换根法】

    正题 题目大意 一棵树,一条边的权是原本的权值减去出发点的加速. 求一个点使得这个点到所有点路径边权和最小. 解题思路 我们先求出以1为根时的答案 然后用换根法 我们从1转移到2,我们会发现 红色的部 ...

最新文章

  1. [精华][推荐]CAS SSO单点登录服务端客户端学习
  2. 关系运算符、逻辑 运算符与三元运算符
  3. Python的介绍与安装
  4. 雷锋网独家解读:阿里云原生应用的布局与策略
  5. PPRevealSideViewController
  6. PHP-CGI, FastCGI, PHP-FPM的关系和区别
  7. 查询空值中的注意事项
  8. Visual Studio 添加 自定义 路径宏
  9. 李洋疯狂C语言之有关“you are come from shanghai”逆序(二)
  10. Java线程之间的协作
  11. 浙江大学-英特尔嵌入式技术中心成立
  12. 新闻简报(7/18)
  13. listary什么意思_listary pro有什么功能
  14. JS页面跳转页面大全
  15. 商户都在用的进销存软件,哪一个性价比最高?
  16. bzoj4565 [Haoi2016]字符合并 (区间DP + 状压DP)
  17. 手机卸载不了刷机精灵
  18. 【C++加载dll失败之依赖检查】
  19. 移动浪潮下,看地推吧如何“霸占”行业新风口
  20. 最小相位滤波器 matlab,基于MATLAB最小相位数字滤波器的设计方法研究

热门文章

  1. st link v2引脚连接_ST-Link资料02_ST-Link固件介绍,及固件命名规则
  2. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧
  3. html二级页面内容滑动,jQuery+CSS实现的网页二级下滑菜单效果
  4. php对表格的处理,JavaScript_js处理表格对table进行修饰,js处理表格 1、行颜色间隔显示 - phpStudy...
  5. leetcode刷题可以用python吗_LeetCode刷题——第四天(python)
  6. windows制作定时关机脚本_自动关机、自动打开程序… 让Windows自动执行任何操作...
  7. leetcode718. 最长重复子数组
  8. Java StringBuffer 方法
  9. [Java基础]对象(反)序列化流
  10. 2021年度训练联盟热身训练赛第五场F题Group Project