【题解】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;
}
【题解】Luogu P5405 [CTS2019]氪金手游的更多相关文章
- p5405 [CTS2019]氪金手游
题目大意 题意狗屁不通 看毛子语都比看这个题面强 分析 我们假设这棵树是一个内向树 那么我们可以轻易的得到dp[x][i]表示x点子树和为i的期望 转移只需枚举当前期望大小和子树期望大小即可 但是由于 ...
- [CTS2019]氪金手游
[CTS2019]氪金手游 各种情况加在一起 先考虑弱化版:外向树,wi确定 i合法的概率就是wi/sw sw表示子树的w的和,和子树外情况无关 这些概率乘起来就是最终合法的概率 如果都是外向树, f ...
- 题解-CTS2019氪金手游
Problem \(\mathtt {loj-3124}\) 题意概要:给定 \(n\) 个点,\(w_i\) 分别有 \(p_{i,1},p_{i,2},p_{i,3}\) 的概率取 \(1,2,3 ...
- LOJ3124 CTS2019 氪金手游 概率、容斥、树形DP
传送门 D2T3签到题可真是IQ Decrease,概率独立没想到然后就20pts滚粗了 注意题目是先对于所有点rand一个权值\(w\)然后再抽卡. 先考虑给出的关系是一棵外向树的情况.那么我们要求 ...
- [LOJ#3119][Luogu5405][CTS2019]氪金手游(DP+容斥)
先考虑外向树的做法,显然一个点在其子树内第一个出现的概率等于它的权值除以它子树的权值和.于是f[i][j]表示i的子树的权值和为j时,i子树内所有数的相互顺序都满足条件的概率,转移直接做一个背包卷积即 ...
- Luogu5405 CTS2019氪金手游(容斥原理+树形dp)
考虑外向树怎么做.显然设f[i][j]为i子树中出现权值和为j的合法方案的概率,转移做树形背包即可. 如果树上只有一条反向边,显然可以先不考虑该边计算概率,再减去将整棵树看做外向树的概率.于是考虑容斥 ...
- [CTS2019]氪金手游(容斥+树形背包DP)
降智好题.本蒟蒻VP时没想到怎么做被题面迷惑了,只会20分的“好”成绩.简直自闭了. 首先显然度为0的点是白给的,根据等比数列求和公式即可求得.然后考虑这个树如果是一颗外向树,就是每个点先父亲再自己. ...
- 【CTS2019】氪金手游(动态规划)
[CTS2019]氪金手游(动态规划) 题面 LOJ 洛谷 题解 首先不难发现整个图构成的结构是一棵树,如果这个东西是一个外向树的话,那么我们在意的只有这棵子树内的顺序关系,子树外的关系与这棵子树之间 ...
- Loj #3124. 「CTS2019 | CTSC2019」氪金手游
Loj #3124. 「CTS2019 | CTSC2019」氪金手游 题目描述 小刘同学是一个喜欢氪金手游的男孩子. 他最近迷上了一个新游戏,游戏的内容就是不断地抽卡.现在已知: - 卡池里总共有 ...
随机推荐
- linux安装yasm报错
进入yasm-1.2.0, 输入指令 ./configure //编译yasm make && make install //安装yasm,安装完成即可. 报错信息 make[2]: ...
- leetcode:7. 整数反转
题目描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例: 输入: 123 输出: 321 输入: -123 输出: -321 输入: 120 输出: 21 注意:假 ...
- Multihypothesis Trajectory Analysis for Robust Visual Tracking
Multihypothesis Trajectory Analysis for Robust Visual Tracking 2019-10-27 14:33:49 Paper: https://ww ...
- 修改Jupyter Notebook默认文件存储路径(已安装Anaconda)
https://blog.csdn.net/weixin_44799144/article/details/91823079 修改Jupyter Notebook默认文件存储路径首先,安装好Anaco ...
- 解决Linux系统下面javamelody图片中文乱码问题
从windows系统中,copy了C:\Windows\Fonts\msyh.ttc和msyhbd.ttc 2个文件到 服务器的%JAVA_HOME%\jre\lib\fonts\fallback 目 ...
- Embed MP4 in HTML using flash-player(html5 video player)
https://stackoverflow.com/questions/1000851/embed-mp4-in-html-using-flash-player ******************* ...
- DSCP 标
DSCP差分服务代码点(Differentiated Services Code Point).它在每个数据包IP头部的服务类别TOS标识字节中,利用已使用的6比特和未使用的2比特,通过编码值来区分优 ...
- SSAS 项目部署失败的问题
在创建SSAS项目过程中,创建数据源.数据源视图.多维数据集.纬度等一切都没有问题.但是在“进程”这一步的时候,发现总是报错,提示如下.OLE DB 错误: OLE DB 或 ODBC 错误 : 用户 ...
- 经典面试题之——如何自由转换两个没有继承关系的字段及类型相同的实体模型,AutoMapper?
相信很多童鞋们都被问到过这个问题,不管是在面试的时候被问过,还是笔试题里考过,甚至有些童鞋们找我要学习资料的时候我也考过这个问题,包括博主我自己,也曾被问过,而且博主现在有时作为公司的面试官,也喜欢问 ...
- [线性代数xOI/ACM]系数矩阵的QGXZ分解
一些无关紧要的Q&A Q:你是怎么想到这个花里胡哨的算法的啊? A:前几天学习线性代数时有幸和Magolor大佬讨论到 $LU$ 分解在多解时的时间复杂度问题,于是yy出了这个奇怪(?)的算法 ...