【题解】Luogu P5405 [CTS2019]氪金手游
原题传送门
我们珂以先考虑一条链的情况,设\(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]氪金手游相关推荐
- P5405 [CTS2019]氪金手游 【数学概率+树形dp】
P5405 [CTS2019]氪金手游 [数学概率+树形dp] 先考虑外向树的情况: 这个的关键是要把求满足拓扑序的概率转化为求 每个点都比它的子树中的所有节点先取到的概率 .单个节点 xxx 的概率 ...
- p5405 [CTS2019]氪金手游
题目大意 题意狗屁不通 看毛子语都比看这个题面强 分析 我们假设这棵树是一个内向树 那么我们可以轻易的得到dp[x][i]表示x点子树和为i的期望 转移只需枚举当前期望大小和子树期望大小即可 但是由于 ...
- [CTS2019]氪金手游 概率Dp,树形Dp,容斥原理
[CTS2019]氪金手游 题目传送门: luogu 分析 先考虑一下那个奇怪的条件(都知道是哪个吧) 它实际上是说,整个结构形成了一棵树. 但是这棵树很奇怪,边有顺的也有反的. 先考虑全是顺的边的情 ...
- 题解-CTS2019氪金手游
Problem \(\mathtt {loj-3124}\) 题意概要:给定 \(n\) 个点,\(w_i\) 分别有 \(p_{i,1},p_{i,2},p_{i,3}\) 的概率取 \(1,2,3 ...
- [CTS2019]氪金手游
https://www.luogu.org/problemnew/show/P5405 题解 首先考虑一条链的情况. \(O->O->O->O->O\) 比如说这样一条链. 每 ...
- [LOJ#3124][CTS2019]氪金手游(概率 + 树形 DP + 容斥)
Address 洛谷 P5405 LOJ #3124 Solution 先考虑如果以某个点(下面定为 111 )为根时,如果所有的限制二元组 (u,v)(u,v)(u,v) 都满足 uuu 是 vvv ...
- CTS2019 氪金手游
题目链接 考虑我们现在只会外向树的dp,现在想办法如何处理反向的边. 考虑容斥,计算至少有\(i\)条边不合法的情况,容斥系数是\((-1)^i\) 这个容斥可以用dp来做,这题就完了. 代码 #in ...
- LOJ3124 CTS2019 氪金手游 概率、容斥、树形DP
传送门 D2T3签到题可真是IQ Decrease,概率独立没想到然后就20pts滚粗了 注意题目是先对于所有点rand一个权值\(w\)然后再抽卡. 先考虑给出的关系是一棵外向树的情况.那么我们要求 ...
- [CTS2019]氪金手游(容斥+树形背包DP)
降智好题.本蒟蒻VP时没想到怎么做被题面迷惑了,只会20分的"好"成绩.简直自闭了. 首先显然度为0的点是白给的,根据等比数列求和公式即可求得.然后考虑这个树如果是一颗外向树,就是 ...
最新文章
- 使用指针做函数返回值
- Java基础教程(15)--枚举类型
- php中短信验证大致流程,实现php手机短信验证功能的基本思路
- numpy逻辑运算符
- JS获取并操作iframe中元素的方法
- .net导出Excel
- 前端学习(378):新春贺卡制作1
- JavaScript四则运算的一些特殊情况
- XML-RPC技术在WP上研究(一)
- mysql case默认_MySQL -- 配置文件my.cnf 的详细说明
- 英伟达用GAN生成脑瘤图像,训练出的AI医生,准确率提高16%
- mysql数据库大小 shell_shell脚本操作mysql数据库
- 为什么前端H5工程师工资那么高?
- 微信小程序 3 ~ 微信小程序开源项目合集
- opengl超级宝典(第5版)的环境搭建
- opencms的安装
- matlab面试问题,前25个MATLAB面试问题
- torch.masked_select()和Tensor.masked_scatter()的用法
- 【浅墨著作】 OpenCV3编程入门 内容简介 勘误 配套源代码下载
- z自建服务器,《守望先锋》将加入自建服务器 自定规则
热门文章
- 文本进行90度翻转HTML,字体逆时针旋转90度
- 2019最新微信墙微信上墙微信弹幕婚庆会议大屏幕3D签到抽奖摇一摇微信上墙
- 锂离子电池热失控的机理
- ps4移植android游戏,安卓玩PS4游戏 remote play安装教程
- Nexus 搭建私有镜像仓库
- 2021年数维杯数学建模分析和思路——B题
- sql中的大于小于等于的表示
- 用Python制作一条五彩蟒蛇
- 上位机使用python/matlab通过网线VISA/SCPI编程远程控制旧版A.06.04.32的安捷伦agilent矢量网络分析仪(VNA)采集S21参数
- pandas 两个日期相减!注意点