题目大意

题意狗屁不通

看毛子语都比看这个题面强

分析

我们假设这棵树是一个内向树

那么我们可以轻易的得到dp[x][i]表示x点子树和为i的期望

转移只需枚举当前期望大小和子树期望大小即可

但是由于边的方向不一定

所以这棵树上存在反向边

我们可以容斥有i个边不合法的情况

因此对于一个反向边要么x点加上关系合法,将子树分离的贡献

要么这个边算是不合法的

对于这种情况我们可以直接减掉贡献

因为我们知道这个贡献已经是0~i的容斥情况

而这个减号相当于*-1

可以完成容斥

复杂度O(n^2)

代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
const int mod = 998244353;
int dp[1100][3300],n,m,inv[3300],res[3300],siz[1100];
vector<pair<int,int> >v[1100];
inline int pw(int x,int p){int ans=1;while(p){if(p&1)ans=1ll*ans*x%mod;x=1ll*x*x%mod;p>>=1;}return ans;
}
inline void dfs(int x,int fa){siz[x]=1;for(int i=0;i<v[x].size();i++)if(v[x][i].fi!=fa){int y=v[x][i].fi,z=v[x][i].se;dfs(y,x);for(int j=0;j<=3*siz[x];j++)for(int k=0;k<=3*siz[y];k++){int sum=1ll*dp[x][j]*dp[y][k]%mod;if(z)res[j+k]=(res[j+k]+sum)%mod;else res[j+k]=(res[j+k]-sum+mod)%mod,res[j]=(res[j]+sum)%mod;}siz[x]+=siz[y];for(int j=0;j<=3*siz[x];j++)dp[x][j]=res[j],res[j]=0;}for(int i=0;i<=3*siz[x];i++)dp[x][i]=1ll*dp[x][i]*inv[i]%mod;
}
int main(){int i,j,k,ans=0;scanf("%d",&n);for(i=1;i<=n;i++){int x,y,z,iv;scanf("%d%d%d",&x,&y,&z);iv=pw(x+y+z,mod-2);dp[i][1]=1ll*x*iv%mod;dp[i][2]=2ll*y*iv%mod;dp[i][3]=3ll*z*iv%mod;}for(i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);v[x].pb(mp(y,1));v[y].pb(mp(x,0));}inv[0]=inv[1]=1;for(i=2;i<=3*n;i++)inv[i]=pw(i,mod-2);dfs(1,0);for(i=0;i<=3*n;i++)ans=(ans+dp[1][i])%mod;printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/yzxverygood/p/11519598.html

p5405 [CTS2019]氪金手游相关推荐

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

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

  2. 【题解】Luogu P5405 [CTS2019]氪金手游

    原题传送门 我们珂以先考虑一条链的情况,设\(sum\)为所有\(w_i\)的总和,\(Sw_i\)表示\(\sum_{j=i}^nw_i\) \[1 \rightarrow 2 \rightarro ...

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

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

  4. [CTS2019]氪金手游

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

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

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

  6. 题解-CTS2019氪金手游

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

  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. R7-2 试试多线程 (10 分)
  3. Oracle GoldenGate Logdump工具简要说明
  4. 采用Kruskal算法生成最小生成树,并采用并查集的合并优化和查询优化。
  5. 查看Scala编译的.class文件
  6. 杭电2539点球大战
  7. go mysql es 不要分词_ElasticSearch踩坑记录-Go语言中文社区
  8. Bailian2683 求分数序列和【数列和】
  9. python自我复制的程序_Python自我
  10. 扇贝有道180919每日一句
  11. 2009年度优科豪马轮胎全国经销商会议在三亚召开
  12. kali由wifi握手包破解密码gnuplot使用
  13. Android O版本power按键锁屏亮屏流程
  14. 10:统计输入字符串中的单词个数及单词的平均长度
  15. pc端js获取当前经纬度_js获取用户当前地理位置(省、市、经纬度)
  16. 高效工具推荐:技术人员必备的3个知识收藏工具(浏览器插件)
  17. 刘利刚-什么是计算机图形学?
  18. 股票中的KD指标金叉和死叉
  19. 1271:圆柱体的表面积
  20. DeepMind已将AlphaGo引入多领域 Al泡沫严重

热门文章

  1. HDU and 蓝桥杯 完全背包练习题
  2. MYSQL之错误代码----mysql错误代码与JAVA实现
  3. 为什么要学习软件质量保证与测试这门课?
  4. Java开发——IDEA
  5. Kodu程序的菜单---Kodu少儿编程第七天
  6. uniapp里css不是识别*,报 error at token “*“
  7. 实战技法 - 短线操盘 (10)
  8. 检测不到声卡High Definition Audio控制器显示代码10?驱动人生教你如何解决问题
  9. Android如何在账户设置中添加App的账户
  10. 基于惯性传感器的轨迹记录系统