「CTS2019 | CTSC2019」氪金手游

降 智 好 题 ...

考场上签到失败了,没想容斥就只打了20分暴力...


考虑一个事情,你抽中一个度为0的点,相当于把这个点删掉了(当然你也只能抽中度为0的点)

删掉就是字面意思,就是剩下的树变成子问题

考虑为什么,在抽中这个\(i\)号点后,抽中其他点的概率为
\[ \frac{W-w_i}{W}\sum_{i=0}^{\infty}(\frac{w_i}{W})^i=1 \]
说明这个点已经白给了


然后考虑这个树如果是一颗外向树,就是每个点先父亲再自己

有个比较显然的dp,令\(dp_{i,j}\)表示子树\(i\)的\(\sum w=j\)时的概率,转移的时候合并一下子树就好了


然后考虑到,树上一条边相当于一个限制,如果我们去掉这个限制,会多统计一些东西,但是也可以发现,这个多统计的东西就是把边反向的答案...

还是令\(dp_{i,j}\)代表刚刚那个

如果边正向就正常转移

如果反向,就加上去掉限制的再减掉反向的答案(注意到去掉限制的是独立的,我们不需要改变\(W\),只是给他合并一下)


Code:

#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
using std::min;
const int SIZE=1<<21;
char ibuf[SIZE],*iS,*iT;
//#define gc() (iS==iT?(iT=(iS=ibuf)+fread(ibuf,1,SIZE,stdin),iS==iT?EOF:*iS++):*iS++)
#define gc() getchar()
template <class T>
void read(T &x)
{x=0;char c=gc();while(!isdigit(c)) c=gc();while(isdigit(c)) x=x*10+c-'0',c=gc();
}
const int mod=998244353;
int inline add(int x,int y){return x+y>=mod?x+y-mod:x+y;}
#define mul(x,y) (1ll*(x)*(y)%mod)
int qp(int d,int k){int f=1;while(k){if(k&1)f=mul(f,d);d=mul(d,d),k>>=1;}return f;}
const int N=1e3+10;
int n,p[N][4],dp[N][N*3],tmp[N*3],siz[N],inv[N*3];
int head[N],to[N<<1],Next[N<<1],type[N<<1],cnt;
void addedge(int u,int v)
{to[++cnt]=v,type[cnt]=1,Next[cnt]=head[u],head[u]=cnt;to[++cnt]=u,type[cnt]=0,Next[cnt]=head[v],head[v]=cnt;
}
void dfs(int now,int fa)
{dp[now][0]=1;for(int v,i=head[now];i;i=Next[i])if((v=to[i])!=fa){dfs(v,now);memset(tmp,0,sizeof tmp);for(int j=0;j<=siz[now];j++)for(int k=0;k<=siz[v];k++){int aya=mul(dp[now][j],dp[v][k]);if(type[i])tmp[j+k]=add(tmp[j+k],aya);else{tmp[j+k]=add(tmp[j+k],mod-aya);tmp[j]=add(tmp[j],aya);}}siz[now]+=siz[v];for(int j=0;j<=siz[now];j++) dp[now][j]=tmp[j];}memset(tmp,0,sizeof tmp);for(int i=0;i<=siz[now];i++)for(int j=1;j<=3;j++)tmp[i+j]=add(tmp[i+j],mul(dp[now][i],mul(p[now][j],mul(j,inv[i+j]))));siz[now]+=3;for(int i=0;i<=siz[now];i++)dp[now][i]=tmp[i];
}
int main()
{read(n);for(int a1,a2,a3,i=1;i<=n;i++){read(a1),read(a2),read(a3);int sum=qp(a1+a2+a3,mod-2);p[i][1]=mul(a1,sum);p[i][2]=mul(a2,sum);p[i][3]=mul(a3,sum);}inv[0]=1;for(int i=1;i<=n*3;i++) inv[i]=qp(i,mod-2);for(int u,v,i=1;i<n;i++){read(u),read(v);addedge(u,v);}dfs(1,0); int ans=0;for(int i=0;i<=3*n;i++) ans=add(ans,dp[1][i]);printf("%d\n",ans);return 0;
}

2019.5.20

转载于:https://www.cnblogs.com/butterflydew/p/10896058.html

「CTS2019 | CTSC2019」氪金手游 解题报告相关推荐

  1. Loj #3124. 「CTS2019 | CTSC2019」氪金手游

    Loj #3124. 「CTS2019 | CTSC2019」氪金手游 题目描述 小刘同学是一个喜欢氪金手游的男孩子. 他最近迷上了一个新游戏,游戏的内容就是不断地抽卡.现在已知: - 卡池里总共有 ...

  2. LOJ#3124. 「CTS2019 | CTSC2019」氪金手游 容斥+DP

    神仙容斥+DP可还行. code: #include <cstdio> #include <cmath> #include <vector> #include &l ...

  3. #loj3124. 「CTS2019 | CTSC2019」氪金手游

    简单容斥 先假设所有点的权值都给定了 随便选一个点当根开始dfs,如果所有边都是向下指的那么答案就是 \[\prod_{u}\frac{w(u)}{siz(u)}\] 其中\(siz(u)\)表示u子 ...

  4. LOJ 3124 「CTS2019 | CTSC2019」氪金手游——概率+树形DP

    题目:https://loj.ac/problem/3124 看了题解:https://www.cnblogs.com/Itst/p/10883880.html 先考虑外向树. 考虑分母是 \( \s ...

  5. 「CTS2019」氪金手游

    「CTS2019」氪金手游 解题思路 考场上想出了外向树的做法,居然没意识到反向边可以容斥,其实外向树会做的话这个题差不多就做完了. 令 \(dp[u][i]\) 表示单独考虑 \(u\) 节点所在子 ...

  6. 【LOJ3124】「CTS2019」氪金手游

    [题目链接] 点击打开链接 [思路要点] 考虑给出的图为外向树的情况,各个点都需要早于子树中所有的点,记 sizeisize_isizei​ 表示 iii 子树中所有点的 wiw_iwi​ 之和,则获 ...

  7. #3120. 「CTS2019 | CTSC2019」珍珠

    虽然标算是生成函数,但是我们只要头够铁就能用矩阵对角化日过去的 如果我们知道了有几个颜色出现了奇数次,我们就能够计算出这个方案合不合法 所以直接大力dp(i)表示有i个颜色出现了奇数次的方案数就行了 ...

  8. 【LOJ】#3123. 「CTS2019 | CTSC2019」重复

    LOJ3123 60pts 正难则反,熟练转成总方案数减掉每个片段都大于等于s的字典序的方案 按照一般的套路建出kmp上每个点加一个字符的转移边的图(注意这个图开始字母必须是nxt链中下一个相邻的字符 ...

  9. 「分块系列」公主的朋友 解题报告

    公主的朋友 Description Problem 由于\(Wulala\)在上个问题中的精彩表现,公主认为\(Wulala\)是一个很棒的人,就把\(Wulala\)留在 了\(X\)国.这时正好公 ...

最新文章

  1. 【Qt】Qt多屏编程,在指定显示屏上显示指定对话框
  2. 泛型排序器TComparer
  3. JVM 调优实战--VisualVM综合分析可视化工具的使用教程(含远程JMX连接)
  4. 联发科mtk手机处理器怎么样_5G手机价格将再探新低!联发科天玑700芯片发布:入门级5G处理器...
  5. LinbDesk --- 新的extjs4.2 desktop demo : 技术交流Q群:336584192
  6. wpf表格datagrid拖动列_这才是老板要的Excel表格,你做的太丑了!
  7. Https 加密原理分析
  8. Think in Java第四版 读书笔记5第11章
  9. 只安装oracle服务端连plsql,Oracle 不安装Oracle客户端,使用PLSQL连接Oracle服务器
  10. 宿主机172连接容器mysql_开发时从宿主机连接容器中的MySQL
  11. 富士康对夏普收购报价大幅缩水20多亿美元
  12. 修改SAP下载文件路径
  13. 趣谈网络协议(一):综述及二层到三层
  14. 手绘小人多彩论文答辩PPT模板
  15. 工信部发布《2018中国区块链产业白皮书》:量子计算机将给密码体系带来重大安全威胁
  16. 程序开发,也要匠心独运
  17. 【xinfanqie】笔者支招:让Win7系统下的硬盘不在狂闪的诀窍
  18. MapReduce核心思想
  19. Excel中F4键的作用
  20. 决策树 基于python实现ID3,C4.5,CART算法

热门文章

  1. 【FFmpeg 命令】提取音频或视频、提取图片、格式转换等
  2. 【PID优化】基于蝗虫算法PID控制器优化设计含Matlab源码
  3. 真正的软件测试实习一
  4. 多台网络分析仪自动化测试软件NSAT-1000
  5. 无光照渲染shader-二次元
  6. photoshop去眼袋
  7. Mac ssh远程登录腾讯云的解决方案
  8. Finder教程|如何自定义访达工具栏?
  9. python提取cad坐标_教你一个CAD坐标提取的小技巧
  10. android(小米)系统隐藏的小功能