jzoj3844-统计损失【树形dp,换根法】
正题
题目链接: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−>yfy相当于要求出父节点的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,换根法】相关推荐
- P4284-[SHOI2014]概率充电器【树形dp,换根法,数学期望】
正题 题目链接:https://www.luogu.com.cn/problem/P4284 题目大意 nnn个点的一棵树,每个点有pip_ipi概率通电,每个边有一定概率可以导电.求期望有电的节点 ...
- P4827-[国家集训队]Crash 的文明世界【树形dp,换根法,斯特林数】
正题 题目链接:https://www.luogu.com.cn/problem/P4827 题目大意 一颗nnn个点的树,定义dis(i,j)dis(i,j)dis(i,j)表示树上i,ji,ji, ...
- 『树形DP·换根法』Accumulation Degree
题目描述 有一个树形的水系,由 N-1 条河道和 N 个交叉点组成. 我们可以把交叉点看作树中的节点,编号为 1~N,河道则看作树中的无向边. 每条河道都有一个容量,连接 x 与 y 的河道的容量记为 ...
- bzoj 3743 [Coci2015]Kamp——树形dp+换根
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3743 树形dp+换根. "从根出发又回到根" 减去 "mx & ...
- Educational Codeforces Round 67 (Rated for Div. 2)(D思维题 线段树/E树形dp(换根dp) 二次扫描与换根法)
心得 D写了个假算法被hack了wtcl- E据涛神说是二次扫描与换根法,看了看好像和树形dp差不多 F概率dp G费用流 回头再补 思路来源 马老师 归神 贤神等代码 http://www.mami ...
- [BZOJ3677/UOJ#105][APIO2014]Beads and wires 连珠线(树形dp+换根)
Address https://www.lydsy.com/JudgeOnline/problem.php?id=3677 http://uoj.ac/problem/105 Solution 考虑一 ...
- 最大疯子树-树形dp+换根+二次扫描
分析: 疯子树肯定还是一棵树. 所以,所谓的最短路径就是吓唬你的,树上两点之间有且只有一条路径. b1和b2必须是相邻的,否则不可能是一棵疯子树. 再想一想,用同样的方式构造剩下的点的话,那么可以得到 ...
- [题解](树形dp/换根)小x游世界树
2. 小x游世界树 (yggdrasi.pas/c/cpp) [问题描述] 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当 ...
- nssl1163-小x游世界树【树形dp,二次扫描和换根法】
正题 题目大意 一棵树,一条边的权是原本的权值减去出发点的加速. 求一个点使得这个点到所有点路径边权和最小. 解题思路 我们先求出以1为根时的答案 然后用换根法 我们从1转移到2,我们会发现 红色的部 ...
最新文章
- [精华][推荐]CAS SSO单点登录服务端客户端学习
- 关系运算符、逻辑 运算符与三元运算符
- Python的介绍与安装
- 雷锋网独家解读:阿里云原生应用的布局与策略
- PPRevealSideViewController
- PHP-CGI, FastCGI, PHP-FPM的关系和区别
- 查询空值中的注意事项
- Visual Studio 添加 自定义 路径宏
- 李洋疯狂C语言之有关“you are come from shanghai”逆序(二)
- Java线程之间的协作
- 浙江大学-英特尔嵌入式技术中心成立
- 新闻简报(7/18)
- listary什么意思_listary pro有什么功能
- JS页面跳转页面大全
- 商户都在用的进销存软件,哪一个性价比最高?
- bzoj4565 [Haoi2016]字符合并 (区间DP + 状压DP)
- 手机卸载不了刷机精灵
- 【C++加载dll失败之依赖检查】
- 移动浪潮下,看地推吧如何“霸占”行业新风口
- 最小相位滤波器 matlab,基于MATLAB最小相位数字滤波器的设计方法研究
热门文章
- st link v2引脚连接_ST-Link资料02_ST-Link固件介绍,及固件命名规则
- 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧
- html二级页面内容滑动,jQuery+CSS实现的网页二级下滑菜单效果
- php对表格的处理,JavaScript_js处理表格对table进行修饰,js处理表格 1、行颜色间隔显示 - phpStudy...
- leetcode刷题可以用python吗_LeetCode刷题——第四天(python)
- windows制作定时关机脚本_自动关机、自动打开程序… 让Windows自动执行任何操作...
- leetcode718. 最长重复子数组
- Java StringBuffer 方法
- [Java基础]对象(反)序列化流
- 2021年度训练联盟热身训练赛第五场F题Group Project