原题传送门

我们珂以先考虑一条链的情况,设\(sum\)为所有\(w_i\)的总和,\(Sw_i\)表示\(\sum_{j=i}^nw_i\)

\[1 \rightarrow 2 \rightarrow 3 \rightarrow …… \rightarrow n\]

\[P(1\rightarrow n)=\prod_{i=1}^n(\frac{w_i}{Sum}\sum_{j=0}^{\inf}(\frac{Sum-Sw_i}{Sum})^j)=\prod_{i=1}^n\frac{w_i}{Sw_i}\]

考虑有反向边

\[1 \rightarrow 2 \rightarrow …… k \leftarrow k+1 \rightarrow …… \rightarrow n\]

由容斥原理可得:

\[P=P(1 \rightarrow k) \times P(k+1 \rightarrow n)-P(1 \rightarrow n)\]

我们珂以由链推广到树

设\(f[i][j]\)表示\(i\)的子树权值和为\(j\)时状态合法的概率

暴力dp即可

#include <bits/stdc++.h>
#define ll long long
#define N 1005
#define mod 998244353
#define getchar nc
using namespace std;
inline char nc(){static char buf[100000],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{register int x=0,f=1;register char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;
}
inline void write(register int x)
{if(!x)putchar('0');if(x<0)x=-x,putchar('-');static int sta[20];register int tot=0;while(x)sta[tot++]=x%10,x/=10;while(tot)putchar(sta[--tot]+48);
}
inline ll fastpow(register ll a,register int b)
{ll res=1;while(b){if(b&1)res=(res*a)%mod;b>>=1;a=(a*a)%mod;}return res;
}
struct edge{int to,next,st;
}e[N<<1];
int head[N],cnt;
inline void add(register int u,register int v,register int w)
{e[++cnt]=(edge){v,head[u],w};head[u]=cnt;
}
int n,p[N][4],inv[N*3],f[N][N*3],g[N*3],size[N],ans;
inline void dfs(register int x,register int fa)
{f[x][0]=1;for(register int i=head[x];i;i=e[i].next){int v=e[i].to;if(v==fa)continue;dfs(v,x);memset(g,0,sizeof(g));for(register int j=0;j<=size[x];++j)for(register int k=0;k<=size[v];++k){g[j+k]=(g[j+k]+1ll*f[x][j]*f[v][k]%mod*e[i].st%mod)%mod;if(e[i].st!=1)g[j]=(g[j]+1ll*f[x][j]*f[v][k]%mod)%mod;}memcpy(f[x],g,sizeof(g));size[x]+=size[v];}memset(g,0,sizeof(g));for(register int j=0;j<=size[x];++j)for(register int k=1;k<=3;++k)g[j+k]=(g[j+k]+1ll*f[x][j]*k%mod*inv[j+k]%mod*p[x][k]%mod)%mod;memcpy(f[x],g,sizeof(g));size[x]+=3;
}
int main()
{n=read();for(register int i=1;i<=n;++i){int x=0;for(register int j=1;j<=3;++j){p[i][j]=read();x+=p[i][j];}for(register int j=1;j<=3;++j)p[i][j]=p[i][j]*fastpow(x,mod-2)%mod;}for(register int i=1;i<n;++i){int u=read(),v=read();add(u,v,1);add(v,u,mod-1);}inv[1]=1;for(register int i=2;i<=n*3;++i)inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;dfs(1,0);for(register int i=1;i<=n*3;++i)ans=(ans+f[1][i])%mod;write(ans);return 0;
}

转载于:https://www.cnblogs.com/yzhang-rp-inf/p/10925807.html

【题解】Luogu P5405 [CTS2019]氪金手游相关推荐

  1. P5405 [CTS2019]氪金手游 【数学概率+树形dp】

    P5405 [CTS2019]氪金手游 [数学概率+树形dp] 先考虑外向树的情况: 这个的关键是要把求满足拓扑序的概率转化为求 每个点都比它的子树中的所有节点先取到的概率 .单个节点 xxx 的概率 ...

  2. p5405 [CTS2019]氪金手游

    题目大意 题意狗屁不通 看毛子语都比看这个题面强 分析 我们假设这棵树是一个内向树 那么我们可以轻易的得到dp[x][i]表示x点子树和为i的期望 转移只需枚举当前期望大小和子树期望大小即可 但是由于 ...

  3. [CTS2019]氪金手游 概率Dp,树形Dp,容斥原理

    [CTS2019]氪金手游 题目传送门: luogu 分析 先考虑一下那个奇怪的条件(都知道是哪个吧) 它实际上是说,整个结构形成了一棵树. 但是这棵树很奇怪,边有顺的也有反的. 先考虑全是顺的边的情 ...

  4. 题解-CTS2019氪金手游

    Problem \(\mathtt {loj-3124}\) 题意概要:给定 \(n\) 个点,\(w_i\) 分别有 \(p_{i,1},p_{i,2},p_{i,3}\) 的概率取 \(1,2,3 ...

  5. [CTS2019]氪金手游

    https://www.luogu.org/problemnew/show/P5405 题解 首先考虑一条链的情况. \(O->O->O->O->O\) 比如说这样一条链. 每 ...

  6. [LOJ#3124][CTS2019]氪金手游(概率 + 树形 DP + 容斥)

    Address 洛谷 P5405 LOJ #3124 Solution 先考虑如果以某个点(下面定为 111 )为根时,如果所有的限制二元组 (u,v)(u,v)(u,v) 都满足 uuu 是 vvv ...

  7. CTS2019 氪金手游

    题目链接 考虑我们现在只会外向树的dp,现在想办法如何处理反向的边. 考虑容斥,计算至少有\(i\)条边不合法的情况,容斥系数是\((-1)^i\) 这个容斥可以用dp来做,这题就完了. 代码 #in ...

  8. LOJ3124 CTS2019 氪金手游 概率、容斥、树形DP

    传送门 D2T3签到题可真是IQ Decrease,概率独立没想到然后就20pts滚粗了 注意题目是先对于所有点rand一个权值\(w\)然后再抽卡. 先考虑给出的关系是一棵外向树的情况.那么我们要求 ...

  9. [CTS2019]氪金手游(容斥+树形背包DP)

    降智好题.本蒟蒻VP时没想到怎么做被题面迷惑了,只会20分的"好"成绩.简直自闭了. 首先显然度为0的点是白给的,根据等比数列求和公式即可求得.然后考虑这个树如果是一颗外向树,就是 ...

最新文章

  1. 使用指针做函数返回值
  2. Java基础教程(15)--枚举类型
  3. php中短信验证大致流程,实现php手机短信验证功能的基本思路
  4. numpy逻辑运算符
  5. JS获取并操作iframe中元素的方法
  6. .net导出Excel
  7. 前端学习(378):新春贺卡制作1
  8. JavaScript四则运算的一些特殊情况
  9. XML-RPC技术在WP上研究(一)
  10. mysql case默认_MySQL -- 配置文件my.cnf 的详细说明
  11. 英伟达用GAN生成脑瘤图像,训练出的AI医生,准确率提高16%
  12. mysql数据库大小 shell_shell脚本操作mysql数据库
  13. 为什么前端H5工程师工资那么高?
  14. 微信小程序 3 ~ 微信小程序开源项目合集
  15. opengl超级宝典(第5版)的环境搭建
  16. opencms的安装
  17. matlab面试问题,前25个MATLAB面试问题
  18. torch.masked_select()和Tensor.masked_scatter()的用法
  19. 【浅墨著作】 OpenCV3编程入门 内容简介 勘误 配套源代码下载
  20. z自建服务器,《守望先锋》将加入自建服务器 自定规则

热门文章

  1. 文本进行90度翻转HTML,字体逆时针旋转90度
  2. 2019最新微信墙微信上墙微信弹幕婚庆会议大屏幕3D签到抽奖摇一摇微信上墙
  3. 锂离子电池热失控的机理
  4. ps4移植android游戏,安卓玩PS4游戏 remote play安装教程
  5. Nexus 搭建私有镜像仓库
  6. 2021年数维杯数学建模分析和思路——B题
  7. sql中的大于小于等于的表示
  8. 用Python制作一条五彩蟒蛇
  9. 上位机使用python/matlab通过网线VISA/SCPI编程远程控制旧版A.06.04.32的安捷伦agilent矢量网络分析仪(VNA)采集S21参数
  10. pandas 两个日期相减!注意点