LOJ#3124. 「CTS2019 | CTSC2019」氪金手游 容斥+DP
神仙容斥+DP可还行.
code:
#include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <algorithm> #define N 1007 #define ll long long #define mod 998244353 #define pb push_back #define setIO(s) freopen(s".in","r",stdin) using namespace std; int n,a[N][4],size[N<<2],f[N][N<<2],tmp[N<<2]; struct Edge { int ty,v; Edge(int ty=0,int v=0):ty(ty),v(v){} }; vector<Edge>G[N]; int qpow(int x,int y) { int tmp=1; for(;y;y>>=1,x=(ll)x*x%mod) { if(y&1) tmp=(ll)tmp*x%mod; } return tmp; } inline int get_inv(int x) { return qpow(x,mod-2); } inline int ADD(int x,int y) { return (x+y)>=mod?x+y-mod:x+y; } inline int DEC(int x,int y) { return (x-y)<0?(x-y+mod):x-y; } void dfs(int x,int ff) { size[x]=3; f[x][1]=a[x][1],f[x][2]=a[x][2],f[x][3]=a[x][3]; for(int i=0;i<G[x].size();++i) { Edge e=G[x][i]; if(e.v==ff) continue; dfs(e.v,x); int y=e.v; for(int j=1;j<=size[x]+size[y];++j) { tmp[j]=0; }if(e.ty==0) {for(int j=1;j<=size[x];++j) { for(int k=1;k<=size[y];++k) { int cur=(ll)f[x][j]*f[y][k]%mod; tmp[j+k]=DEC(tmp[j+k],cur); tmp[j]=ADD(tmp[j],cur); }}} else { for(int j=1;j<=size[x];++j) { for(int k=1;k<=size[y];++k) { tmp[j+k]=ADD(tmp[j+k],(ll)f[x][j]*f[y][k]%mod); }}}size[x]+=size[y]; for(int j=1;j<=size[x];++j) f[x][j]=tmp[j]; } for(int i=1;i<=size[x];++i) f[x][i]=(ll)f[x][i]*get_inv(i)%mod; } int main() { // setIO("input"); scanf("%d",&n); int x,y,z; for(int i=1;i<=n;++i) { scanf("%d%d%d",&x,&y,&z); ll s=x+y+z; s=get_inv(s%(mod-2)); a[i][1]=(ll)x*s%mod; a[i][2]=(ll)2*y%mod*s%mod; a[i][3]=(ll)3*z%mod*s%mod; } for(int i=1;i<n;++i) { scanf("%d%d",&x,&y); G[x].pb(Edge(1,y)); G[y].pb(Edge(0,x)); } dfs(1,0); int ans=0; for(int i=1;i<=size[1];++i) { ans=ADD(ans,f[1][i]); } printf("%d\n",ans); return 0; }
LOJ#3124. 「CTS2019 | CTSC2019」氪金手游 容斥+DP相关推荐
- LOJ 3124 「CTS2019 | CTSC2019」氪金手游——概率+树形DP
题目:https://loj.ac/problem/3124 看了题解:https://www.cnblogs.com/Itst/p/10883880.html 先考虑外向树. 考虑分母是 \( \s ...
- Loj #3124. 「CTS2019 | CTSC2019」氪金手游
Loj #3124. 「CTS2019 | CTSC2019」氪金手游 题目描述 小刘同学是一个喜欢氪金手游的男孩子. 他最近迷上了一个新游戏,游戏的内容就是不断地抽卡.现在已知: - 卡池里总共有 ...
- 「CTS2019 | CTSC2019」氪金手游 解题报告
「CTS2019 | CTSC2019」氪金手游 降 智 好 题 ... 考场上签到失败了,没想容斥就只打了20分暴力... 考虑一个事情,你抽中一个度为0的点,相当于把这个点删掉了(当然你也只能抽中 ...
- #loj3124. 「CTS2019 | CTSC2019」氪金手游
简单容斥 先假设所有点的权值都给定了 随便选一个点当根开始dfs,如果所有边都是向下指的那么答案就是 \[\prod_{u}\frac{w(u)}{siz(u)}\] 其中\(siz(u)\)表示u子 ...
- 「CTS2019」氪金手游
「CTS2019」氪金手游 解题思路 考场上想出了外向树的做法,居然没意识到反向边可以容斥,其实外向树会做的话这个题差不多就做完了. 令 \(dp[u][i]\) 表示单独考虑 \(u\) 节点所在子 ...
- 【LOJ】#3123. 「CTS2019 | CTSC2019」重复
LOJ3123 60pts 正难则反,熟练转成总方案数减掉每个片段都大于等于s的字典序的方案 按照一般的套路建出kmp上每个点加一个字符的转移边的图(注意这个图开始字母必须是nxt链中下一个相邻的字符 ...
- 【LOJ3124】「CTS2019」氪金手游
[题目链接] 点击打开链接 [思路要点] 考虑给出的图为外向树的情况,各个点都需要早于子树中所有的点,记 sizeisize_isizei 表示 iii 子树中所有点的 wiw_iwi 之和,则获 ...
- #3120. 「CTS2019 | CTSC2019」珍珠
虽然标算是生成函数,但是我们只要头够铁就能用矩阵对角化日过去的 如果我们知道了有几个颜色出现了奇数次,我们就能够计算出这个方案合不合法 所以直接大力dp(i)表示有i个颜色出现了奇数次的方案数就行了 ...
- P5405-[CTS2019]氪金手游【树形dp,容斥,数学期望】
前言 话说在LojLojLoj下了个数据发现这题的名字叫fgofgofgo 正题 题目链接:https://www.luogu.com.cn/problem/P5405 题目大意 nnn张卡的权值为1 ...
最新文章
- 基于 Laravel 5 构建的、支持模块化和多语言的 CMS —— AsgardCMS
- WINCE6.0+S3C2443的启动过程---eboot1
- Involution代码
- 复随机变量及高斯熵的概念
- 关于IOCP完成端口的文章
- 2020年推荐系统工程师炼丹手册RecSys-Long Paper版
- Rabbit发送消息,消费者消费异常
- 成考期末计算机组成原理,2020年10月自考02318计算机组成原理真题及答案
- 吉林市一日游规格说明书
- 光耀卡服务器维修,3月28号服务器维护公告
- 以太坊生态缺陷导致的一起亿级代币盗窃大案
- tomcat运行后报错“Address localhost:1099 is already in use”
- C#—飞行棋超全总结(全注释版)
- 学科语文方面的论文怎么选题?
- 【中序、后序遍历序列】【前序、中序遍历序列】构造二叉树
- 【Android 10 源码】healthd 模块 BatteryService 初始化
- 使用canvas绘制一个动态的表盘
- 开源 java CMS - FreeCMS2.4 统计分析
- 第25章 MySQL ALTER命令教程
- 抢先报名 Google 谷歌 菊与刀的金矿岛国 - 细说日本游戏出海 线上研讨会