p5405 [CTS2019]氪金手游
题目大意
题意狗屁不通
看毛子语都比看这个题面强

分析
我们假设这棵树是一个内向树
那么我们可以轻易的得到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 = ;
int dp[][],n,m,inv[],res[],siz[];
vector<pair<int,int> >v[];
inline int pw(int x,int p){
int ans=;
while(p){
if(p&)ans=1ll*ans*x%mod;
x=1ll*x*x%mod;
p>>=;
}
return ans;
}
inline void dfs(int x,int fa){
siz[x]=;
for(int i=;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=;j<=*siz[x];j++)
for(int k=;k<=*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=;j<=*siz[x];j++)dp[x][j]=res[j],res[j]=;
}
for(int i=;i<=*siz[x];i++)dp[x][i]=1ll*dp[x][i]*inv[i]%mod;
}
int main(){
int i,j,k,ans=;
scanf("%d",&n);
for(i=;i<=n;i++){
int x,y,z,iv;
scanf("%d%d%d",&x,&y,&z);
iv=pw(x+y+z,mod-);
dp[i][]=1ll*x*iv%mod;
dp[i][]=2ll*y*iv%mod;
dp[i][]=3ll*z*iv%mod;
}
for(i=;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
v[x].pb(mp(y,));
v[y].pb(mp(x,));
}
inv[]=inv[]=;
for(i=;i<=*n;i++)inv[i]=pw(i,mod-);
dfs(,);
for(i=;i<=*n;i++)ans=(ans+dp[][i])%mod;
printf("%d\n",ans);
return ;
}
p5405 [CTS2019]氪金手游的更多相关文章
- 【题解】Luogu P5405 [CTS2019]氪金手游
原题传送门 我们珂以先考虑一条链的情况,设\(sum\)为所有\(w_i\)的总和,\(Sw_i\)表示\(\sum_{j=i}^nw_i\) \[1 \rightarrow 2 \rightarro ...
- [CTS2019]氪金手游
[CTS2019]氪金手游 各种情况加在一起 先考虑弱化版:外向树,wi确定 i合法的概率就是wi/sw sw表示子树的w的和,和子树外情况无关 这些概率乘起来就是最终合法的概率 如果都是外向树, f ...
- LOJ3124 CTS2019 氪金手游 概率、容斥、树形DP
传送门 D2T3签到题可真是IQ Decrease,概率独立没想到然后就20pts滚粗了 注意题目是先对于所有点rand一个权值\(w\)然后再抽卡. 先考虑给出的关系是一棵外向树的情况.那么我们要求 ...
- [LOJ#3119][Luogu5405][CTS2019]氪金手游(DP+容斥)
先考虑外向树的做法,显然一个点在其子树内第一个出现的概率等于它的权值除以它子树的权值和.于是f[i][j]表示i的子树的权值和为j时,i子树内所有数的相互顺序都满足条件的概率,转移直接做一个背包卷积即 ...
- 题解-CTS2019氪金手游
Problem \(\mathtt {loj-3124}\) 题意概要:给定 \(n\) 个点,\(w_i\) 分别有 \(p_{i,1},p_{i,2},p_{i,3}\) 的概率取 \(1,2,3 ...
- Luogu5405 CTS2019氪金手游(容斥原理+树形dp)
考虑外向树怎么做.显然设f[i][j]为i子树中出现权值和为j的合法方案的概率,转移做树形背包即可. 如果树上只有一条反向边,显然可以先不考虑该边计算概率,再减去将整棵树看做外向树的概率.于是考虑容斥 ...
- [CTS2019]氪金手游(容斥+树形背包DP)
降智好题.本蒟蒻VP时没想到怎么做被题面迷惑了,只会20分的“好”成绩.简直自闭了. 首先显然度为0的点是白给的,根据等比数列求和公式即可求得.然后考虑这个树如果是一颗外向树,就是每个点先父亲再自己. ...
- Loj #3124. 「CTS2019 | CTSC2019」氪金手游
Loj #3124. 「CTS2019 | CTSC2019」氪金手游 题目描述 小刘同学是一个喜欢氪金手游的男孩子. 他最近迷上了一个新游戏,游戏的内容就是不断地抽卡.现在已知: - 卡池里总共有 ...
- 【CTS2019】氪金手游(动态规划)
[CTS2019]氪金手游(动态规划) 题面 LOJ 洛谷 题解 首先不难发现整个图构成的结构是一棵树,如果这个东西是一个外向树的话,那么我们在意的只有这棵子树内的顺序关系,子树外的关系与这棵子树之间 ...
随机推荐
- java锁的概念
在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁.非公平锁.自旋锁.可重入锁.偏向锁.轻量级锁.重量级锁.读写锁.互斥锁等待.这里整理了Java中的各种锁,若有不足之处希望大家在下方 ...
- 压缩图片工具类,压缩100KB以内拿走直接用
最近遇到自拍上传图片过大问题,很烦恼,所以自己写了一个压缩图片的工具类使用,自测效果很不错,可以压缩到KB以内,像素还可以分辨清晰 下面Java代码奉上: import lombok.extern.s ...
- Node.js实战7:你了解buffer吗?
Buffer是NodeJS的重要数据类型,很有广泛的应用. Buffer是代表原始堆的分配额的数据类型.在NodeJS中以类数组的方式使用. 比如,用法示例: var buf = new Buffer ...
- Vue 基础 day03
定义Vue 组件 什么是组件:组件的出现,就是为了拆分 Vue 实例的代码量,能够让我们以不同的组件,来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件: 组件化和模块化的不同: ...
- JVM-堆内存
1. java堆内存介绍 java的堆内存可以类比于计算机的内存,是存储整个机器数据的地方. (1)jvm一起动就创建java堆.类比计算机一起动就加载内存. (2)所有的线程共享.类比计算机所有进程 ...
- 手写ORM持久层框架(转)
工程结构: 本文测试的数据库为: 其中student的表结构为: 表数据: 配置文件 DB2.properties driver=com.mysql.jdbc.Driver url=jdbc\:mys ...
- django实例收集
django笔记(一)(模板渲染变量.字典.for循环.索引.条件语句) django笔记(二) django环境准备与笔记(三) django笔记(四) django笔记(五) Views的补充 w ...
- C#设计模式:迭代器模式(Iterator Pattern)
一,什么是迭代器模式(Iterator Pattern) 提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示 二,看下面例子: using System; using Sys ...
- Spring基础学习笔记
1. Spring入门 1. 1 Spring的体系结构 1.2 HelloWorld 1.2.1 Maven的使用 1)maven 的javase工程目录结构: 2)maven的settings.x ...
- JavaScript中Number(),parseInt()和parseFloat()区别
parseInt() 函数可解析一个字符串,并返回一个整数; parseFloat() 函数可解析一个字符串,并返回一个浮点数, 以上都是截取转换,具体代码如下: alert(parseInt(&qu ...