【CTS2019】氪金手游(动态规划)

题面

LOJ
洛谷

题解

首先不难发现整个图构成的结构是一棵树,如果这个东西是一个外向树的话,那么我们在意的只有这棵子树内的顺序关系,子树外的关系与这棵子树之间的限制无关。所以我们只需要强制根节点在其他儿子之前的就行了(你可以认为如果这次随机抽到了子树外面的东西就重新抽一次,这个概率等于只考虑子树权值和的概率),那么这里的概率就是\(\frac{w_u}{\sum w}\)。然后每个根节点显然可以独立考虑,所以只需要把所有根节点的结果直接乘起来就好了。
那么对于\(w\)也有概率的情况,设\(f[i][w]\)表示以\(i\)为根的子树中,权值和为\(w\)时根节点合法的概率。
这个随便转移一下就很好做了。
现在加上了反向边,反向边强制了儿子要在根节点之前出现,而状态也只要两种,要么反向边在前要么反向边在后,那么设\(f[i][w][j]\)表示以\(i\)为子树,子树和为\(w\),至少有\(j\)条反向边不满足条件的概率,既然强制了若干个不反向,那么就是你枚举一些边,然后强制把它变成正向边,剩下的反向边直接删掉,这样子就可以求出这个概率。
注意到这个容斥的系数就是简单的\(\pm 1\),所以只需要直接把容斥系数带进去算就行了。
这样子复杂度可以做到\(O(n^2)\)。

#include<iostream>
#include<cstdio>
using namespace std;
#define MOD 998244353
#define MAX 1010
inline int read()
{int x=0;bool t=false;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=true,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return t?-x:x;
}
int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
struct Line{int v,next;}e[MAX<<1];
int h[MAX],cnt=1;
inline void Add(int u,int v){e[cnt]=(Line){v,h[u]};h[u]=cnt++;}
int f[MAX][3*MAX],sz[MAX],p[MAX][4],inv[MAX*3],tmp[MAX*3],n,ans;
void dfs(int u,int ff)
{sz[u]=1;for(int i=h[u];i;i=e[i].next){int v=e[i].v;if(v==ff)continue;dfs(v,u);for(int j=0;j<=3*sz[u];++j)for(int k=0;k<=3*sz[v];++k){int val=1ll*f[u][j]*f[v][k]%MOD;if(i&1)tmp[j+k]=(tmp[j+k]+val)%MOD;else tmp[j+k]=(tmp[j+k]+MOD-val)%MOD,tmp[j]=(tmp[j]+val)%MOD;}sz[u]+=sz[v];for(int j=0;j<=3*sz[u];++j)f[u][j]=tmp[j],tmp[j]=0;}for(int j=0;j<=sz[u]*3;++j)f[u][j]=1ll*f[u][j]*inv[j]%MOD;
}
int main()
{n=read();for(int i=1;i<=n;++i){int a1=read(),a2=read(),a3=read();int inv=fpow(a1+a2+a3,MOD-2);f[i][1]=1ll*a1*inv%MOD;f[i][2]=2ll*a2*inv%MOD;f[i][3]=3ll*a3*inv%MOD;}for(int i=1;i<n;++i){int u=read(),v=read();Add(u,v);Add(v,u);}inv[0]=inv[1]=1;for(int i=2;i<=3*n;++i)inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;dfs(1,0);for(int i=0;i<=3*n;++i)ans=(ans+f[1][i])%MOD;printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/cjyyb/p/10914521.html

【CTS2019】氪金手游(动态规划)相关推荐

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

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

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

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

  3. [CTS2019]氪金手游

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

  4. 题解-CTS2019氪金手游

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

  5. CTS2019 氪金手游

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

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

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

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

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

  8. [LOJ#3119][Luogu5405][CTS2019]氪金手游(DP+容斥)

    先考虑外向树的做法,显然一个点在其子树内第一个出现的概率等于它的权值除以它子树的权值和.于是f[i][j]表示i的子树的权值和为j时,i子树内所有数的相互顺序都满足条件的概率,转移直接做一个背包卷积即 ...

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

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

  10. p5405 [CTS2019]氪金手游

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

最新文章

  1. Beta 冲刺(4/7)
  2. linux输入文件后怎么保存不了怎么办,关于linux:输入数据后为什么不能保存VI文件?...
  3. Vue2.0环境安装
  4. [译] 解密 Mapbox 卫星影像处理神器 Robosat
  5. 宝塔定时任务执行php源码任务_Linux at命令详解:定时执行任务
  6. linux vim配置缩减,让VIM更好的工作——VIM基本配置
  7. Fastify 系列教程三 (验证、序列化和生命周期)
  8. mangos服务器架构
  9. 解决Nginx环境下wordpress设置固定链接打开失败问题
  10. 表格table转pdf分页不连续解决
  11. Python—基础知识之总结(6)
  12. Maven安装和使用(详细版)
  13. Qt无边框窗体实现方案
  14. [144]如何用VBS编写一个简单的恶搞脚本
  15. Ruby on Rails 新版本
  16. JS一元运算符(前++,后++)详解
  17. 阿里云服务器实现 frp 内网穿透
  18. 记第七届ACM校赛-回忆
  19. MySQL按时间段随机更新时间
  20. idea创建Scala入门HelloWorld

热门文章

  1. C语言坐标旋转,c语言矩阵的顺、逆时针旋转
  2. Hyper-V的虚拟化架构
  3. 我的 sfml 学习笔记
  4. ES6新增——反撇号(`)基础知识
  5. freemarker导出excel时office报错而wps不会
  6. 5G知识之0G-5G的技术发展
  7. Juniper JUNOS Commands (Tips and Tricks)
  8. 动物网页html5设置思想,网站设计思想
  9. 使用GPO(Profile-Guided Optimization)优化程序
  10. Hyperic HQ简介