题目传送门(内部题27)


输入格式

第一行有$4$个整数$n,k,p,q$。
第二行有$n$个整数$a_i$。
接下来有$n-1$行,每行有两个整数$u,v$,表示$u$与$v$之间通过化学单键连接。


输出格式

一行一个整数表示答案。


样例

样例输入:

3 2 1 2
1 2 4
1 2
1 3

样例输出:

500000019


数据范围与提示

样例解释:

当没有原子被活化时,概率为$\frac{1}{8}$,爆发值为${(1+2+4)}^2=49$。
当$1$号原子被活化时,概率为$\frac{1}{8}$,爆发值为$2^2+4^2=20$。
当$2$号原子被活化时,概率为$\frac{1}{8}$,爆发值为${(1+4)}^2=25$。
当$3$号原子被活化时,概率为$\frac{1}{8}$,爆发值为${(1+2)}^2=9$。
当$1,2$号原子被活化时,概率为$\frac{1}{8}$,爆发值为$4^2=16$。
当$1,3$号原子被活化时,概率为$\frac{1}{8}$,爆发值为$2^2=4$。
当$2,3$号原子被活化时,概率为$\frac{1}{8}$,爆发值为$1^2=1$。
当$1,2,3$号原子被活化时,概率为$\frac{1}{8}$,爆发值为$0$。
期望为$\frac{124}{8}=\frac{31}{2}$,即$500000019$。

提示:

$\frac{a}{b}$在模质数$m$意义下的值为$a\times b^{m-2}$。
例如,$\frac{31}{2}$在模$1000000007$意义下的值为$31\times 2^{1000000005}\equiv 500000019(\mod {10}^9+7)$。

数据范围:

对于所有数据,$n\leqslant 2\times {10}^5,2\leqslant k\leqslant 10,0\leqslant p<q\leqslant {10}^3,0\leqslant a_i\leqslant {10}^3$。


题解

为了简化问题,我们可以将点权忽略,设所有点的点权都为$1$。
问题可以转化为,给定一颗$n$个节点的无根树,每个节点被选的概率都为$p$,令$q=1−p$,求被选中的点形成的所有联通块的大小的$K$次方的和的期望。

再来普及一下有关这道题的知识点:

对于任意两个事件$X,Y$:
$E(X+Y)=E(X)+E(Y)$。
对于两个相互独立事件$X,Y$:
$E(XY)=E(X)E(Y)$。
因此,对于两个相互独立事件$X,Y$,有:
$E((X+Y)j)=\sum \limits_{k=0}^j C_j^k E(X^k)E(Y^{j−k})$。

那么现在我们开始考虑如何解这道题了。

设$f[i][j]$表示以$i$为根的子树中的所有联通块的大小的$j$次方的和的期望。

设$g[i][j]$表示以$i$为根的子树中$i$所在的连通块的大小的$j$次方的期望。

考虑初始状态,$f[x][j]=g[x][j]=p$。

先来考虑$g$数组的转移:

  将$u$节点的状态与它的一个儿子节点$v$的状态合并,令合并后的状态为$g'$。
  为了方便转移,我们可以先将$g[u][k]$除以$p$表示在$u$节点一定选的情况下的$u$所在连通块的大小的$k$次方的期望,那么$\frac{g[u][k]}{p}$和$g[v][j−k]$可以看作两个相互独立事件的期望,可以根据相互独立事件的期望公式$E({(X+Y)}^j)=\sum \limits_{k=0}^j C_j^k E(X^k)E(Y^{j-k})$进行状态合并。只不过合并后的$g[u][j]'$仍表示在$u$节点一定选的情况下的$u$所在连通块的大小的$j$次方的期望,所以需要再乘以$p$。
$g[u][j]'=p\times \sum \limits_{k=0}^j C_j^k\times \frac{g[u][k]}{p}\times g[v][j−k]$。
即$g[u][j]'=p\times g[v][j]+g[u][j]+\sum \limits_{k=1}^{j-1} C_j^k\times g[u][k]\times g[v][j−k]$。

再来考虑$f$数组的转移:

将$u$节点的状态与它的一个儿子节点$v$的状态合并时,由于$u$的状态和$v$的状态可看做相互独立事件,我们只需要考虑$u$和$v$衔接部分所产生的贡献。
$f[u][j]'=f[u][j]+f[v][j]+\sum \limits_{k=1}^{j−1} C_j^k\times g[u][k]\times g[v][j−k]$。

进行一遍树形$DP$后$f[1][K]$即为最后答案。
对于题目中有点权的情况,我们只需将初始状态设为$f[x][j]=g[x][j]=p\times a_x^j$即可。


代码时刻

#include<bits/stdc++.h>
using namespace std;
struct rec
{
int nxt;
int to;
}e[400000];
int head[200001],cnt;
int n,K;
long long p,q;
long long a[200001][11];
long long C[11][11];
long long dp[200001][11],g[2][200001][11];
void pre_work()
{
C[0][0]=1;
for(int i=1;i<=10;i++)
{
C[i][0]=1;
for(int j=1;j<=i;j++)
C[i][j]=C[i-1][j]+C[i-1][j-1];
}
}
void add(int x,int y)
{
e[++cnt].nxt=head[x];
e[cnt].to=y;
head[x]=cnt;
}
long long qpow(long long x,long long y)
{
long long res=1;
while(y)
{
if(y&1)res=res*x%1000000007;
x=x*x%1000000007;
y>>=1;
}
return res;
}
void dfs(int x,int fa)
{
int son=0;
for(int i=head[x];i;i=e[i].nxt)
if(e[i].to!=fa)
dfs(e[i].to,x);
for(int i=1;i<=K;i++)dp[x][i]=g[0][x][i]=p*a[x][i]%1000000007;
for(int i=head[x];i;i=e[i].nxt)
{
if(e[i].to==fa)continue;
for(int j=1;j<=K;j++)
{
dp[x][j]=(dp[x][j]+dp[e[i].to][j])%1000000007;
for(int k=1;k<j;k++)
dp[x][j]=(dp[x][j]+C[j][k]*g[0][x][k]%1000000007*g[0][e[i].to][j-k]%1000000007)%1000000007;
dp[x][j]=dp[x][j];
}
for(int j=1;j<=K;j++)
{
g[1][x][j]=(g[0][x][j]+p*g[0][e[i].to][j]%1000000007)%1000000007;
for(int k=1;k<j;k++)
g[1][x][j]=(g[1][x][j]+C[j][k]*g[0][x][k]%1000000007*g[0][e[i].to][j-k]%1000000007)%1000000007;
}
for(int j=1;j<=K;j++)g[0][x][j]=g[1][x][j];
}
}
int main()
{
pre_work();
scanf("%d%d%lld%lld",&n,&K,&p,&q);
p=p*qpow(q,1000000005)%1000000007;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i][1]);
for(int j=2;j<=K;j++)
a[i][j]=(a[i][j-1]*a[i][1])%1000000007;
}
for(int i=1;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
dfs(1,0);
printf("%lld",dp[1][K]);
return 0;
}

rp++

[CSP-S模拟测试]:chemistry(期望DP+组合数学)的更多相关文章

  1. cdqz2017-test10-柚的策略(期望DP & 组合数学)

    根据期望的可加性,我们可以算出每一位客人的期望等待时间,将他们累加 即 每一位客人所有可能情况的时间之和 / n! 设S= 每一位客人所有可能情况的时间之和 如果有f(i,p)种方案使客人i是恰好第p ...

  2. [CSP-S模拟测试]:B(DP+数学)

    题目传送门(内部题45) 输入格式 第一行$3$个整数$n,m,P$.第二行$m$个整数,表示$m$次询问. 输出格式 一行$m$个整数表示答案. 样例 样例输入1: 2 4 40 1 2 3 样例输 ...

  3. [CSP-S模拟测试]:蛇(DP+构造+哈希)

    题目传送门(内部题140) 输入格式 前两行有两个长度相同的字符串,描述林先森花园上的字母. 第三行一个字符串$S$. 输出格式 输出一行一个整数,表示有多少种可能的蛇,对$10^9+7$取模. 样例 ...

  4. [CSP-S模拟测试]:最小值(DP+乱搞)

    题目背景 $Maxtir$更喜欢序列的最小值. 题目传送门(内部题128) 输入格式 第一行输入一个正整数$n$和四个整数$A,B,C,D$. 第二行输入$n$个整数,第$i$个数表示$a_i$. 输 ...

  5. [CSP-S模拟测试]:花(DP)

    题目传送门(内部题111) 输入格式 一个整数$T$,表示测试数据组数. 每组测试数据占一行,两个整数,分别表示$L$和$S$. 输出格式 对每组数据,输出一个整数表示答案. 样例 样例输入1: 13 ...

  6. [CSP-S模拟测试]:计数(DP+记忆化搜索)

    题目描述 既然是萌萌哒$visit\text{_}world$的比赛,那必然会有一道计数题啦!考虑一个$N$个节点的二叉树,它的节点被标上了$1\sim N$的编号.并且,编号为$i$的节点在二叉树的 ...

  7. [CSP-S模拟测试]:matrix(DP)

    题目描述 求出满足以下条件的$n\times m$的$01$矩阵个数:(1)第$i$行第$1~l_i$列恰好有$1$个$1$.(2)第$i$行第$r_i~m$列恰好有$1$个$1$.(3)每列至多有$ ...

  8. [CSP-S模拟测试]:题(DP+数学)

    题目描述 出个题就好了.这就是出题人没有写题目背景的原因.你在平面直角坐标系上.你一开始位于$(0,0)$.每次可以在上/下/左/右四个方向中选一个走一步.即:从$(x,y)$走到$(x,y+1),( ...

  9. [CSP-S模拟测试]:题(DP)

    题目描述 由于出题人赶时间所以没办法编故事来作为背景.一开始有$n$个苹果,$m$个人依次来吃苹果,第$i$个人会尝试吃$u_i$或$v_i$号苹果,具体来说分三种情况.$\bullet 1.$两个苹 ...

随机推荐

  1. Python笔记(十八)_私有属性、实例属性、类属性

    私有属性 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,就变成了一个私有属性,只有内部可以访问,外部不能直接访问或修改. 这样就确保了外部代码不能随意修改对象内部的状态,这样通过 ...

  2. 【报错】An error happened during template parsing (template: "class path resource [templates/adminManageCourse.html]")

    页面显示: Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing t ...

  3. Codeforces 1156E Special Segments of Permutation(单调栈)

    可以用单调栈直接维护出ai所能覆盖到的最大的左右范围是什么,然后我们可以用这个范围暴力的去查询这个区间的是否有满足的点对,一个小坑点,要对左右区间的大小进行判断,只需要去枚举距离i最近的一段区间去枚举 ...

  4. [暑假集训Day2T1]种树

    标算是贪心,我写了个差分约束????? 设dist[i]表示1-i号土地种的树的总棵数,考虑以下几种约束条件: 1)dist[y]>=dist[x]+z,即x号土地至y号土地间至少种了z棵树 2 ...

  5. luoguP1505 [国家集训队]旅游(真的毒瘤)

    luogu P1505 [国家集训队]旅游 题目 #include<iostream> #include<cstdio> #include<cstdlib> #in ...

  6. L The Digits String(没有写完,有空补)

    链接:https://ac.nowcoder.com/acm/contest/338/L来源:牛客网 Consider digits strings with length n, how many d ...

  7. Ajax爬取豆瓣电影目录(Python)

    下面的分析相当于一个框架,搞懂之后,对于类似的文字爬取,我们也可以实现.就算不能使用Ajax方法,我们也能够使用相同思想去爬取我们想要的数据. 豆瓣电影排行榜分析 网址:https://movie.d ...

  8. C#编程--第一天

    C#编程 一. 了解C#: 1. C#的定义及其特点 2.vs的集成开发环境:熟悉了解vs2012 二.C#语言基础 1.C#项目的组成结构: .config----配置文件(存放配置参数文件) .c ...

  9. vue.js(7)--vue中的样式绑定

    vue中class样式与内联样式的绑定 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  10. 记录使用node启用微信公众平台服务器配置

    在微信公众平台的基本信息里面的,修改服务器配置后会有下面的界面. EncodingAESKey是随机生成的,加密方式根据需要自己选择. 关于URL和Token: URL:填写之后会向这个URL发送一个 ...