「PKUWC2018」随机游走
Min-Max容斥真好用
LOJ #2542
题意:给一棵不超过1818个节点的树,50005000次询问,每次问从根随机游走走遍一个集合的期望步数
Solution:
考虑Min-Max容斥
有Max(S)=∑T⊆S(−1)|T|+1Min(T)
其中S,T是一个集合,Max(S)表示S中最大元素,Min(S)同理
我们设集合S表示走到每个点的期望时间
显然走遍一个集合的期望时间就是Max(S)
且第一次走到某集合的期望时间是Min(S)
Max(S)不容易计算,我们转而求解Min(S)
令fi表示从点i随机游走第一次走到集合SS的期望步数
这个显然可以高斯消元,不过复杂度略大
由于转移是在树上,可以直接在树上O(n)消元
我们令fi=ki f fa[i]+bi
当ii在集合S中的时候ki=bi=0否则进行转移
转移的时候把当前点孩子的k和b算出然后代到当前点的方程中算出当前点的k和b
这样可以在O(2n⋅n∗算逆元复杂度)的时间复杂度内算出所有的Min(S)
然后直接容斥算Max(S),复杂度是5000∗2n的
我们可以提前预处理每个Max(S)每次枚举子集转移,时间复杂度是3^n的
据说都能过
不过其实这部分可以优化到2n∗n的
我们直接根据popcount(S)的奇偶性来判断是否给Min(S)乘上−1
然后直接高维前缀和即可
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define mod 998244353 #define ll long long using namespace std; struct ret{int k,b;ret operator +(const ret s)const{return {(k+s.k)%mod,(b+s.b)%mod};}ret operator *(const int s)const{return {(ll)k*s%mod,1ll*b*s%mod};} }f[19][1<<18]; const int N=50; int i,j,k,m,n,x,z,cnt,root,Q; int g[N],l[N],c[N],a[N],d[N],inv[N],Min[1<<18]; void add(int x,int y){a[++k]=y;if (!g[x]) g[x]=k;else c[l[x]]=k;l[x]=k; } int pow(int x,int y){int ans=1;for (int i=y;i;i>>=1,x=(ll)x*x%mod)if (i&1) ans=(ll)x*ans%mod;;return (ans+mod)%mod; } ret dfs(int x,int pre,int s){if (s>>x-1&1) return{0,0}; ret now={0,0};for (int i=g[x];i;i=c[i])if (a[i]!=pre) now=now+dfs(a[i],x,s)*inv[d[x]];const int Inv=pow(1-now.k,mod-2);return {(ll)Inv*inv[d[x]]%mod,1ll*Inv*(now.b+1)%mod}; } int main(){scanf("%d",&n);scanf("%d%d",&Q,&root);inv[0]=inv[1]=1;for (int i=2;i<=18;i++) inv[i]=(ll)inv[mod%i]*(mod-mod/i)%mod;for (int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);add(u,v);add(v,u);d[u]++;d[v]++;}for (int i=1;i<(1<<n);i++){ret ans=dfs(root,root,i);Min[i]=ans.b*(__builtin_popcount(i)&1?1:-1);}for (int i=0;i<n;i++)for (int j=0;j<1<<n;j++)if (j>>i&1) (Min[j]+=Min[j^(1<<i)])%=mod;while (Q--){int sum=0;scanf("%d",&x);for(int i=1;i<=x;i++) {int y;scanf("%d",&y);sum|=(1<<y-1);}printf("%d\n",(Min[sum]+mod)%mod);}return 0; }
View Code
转载于:https://www.cnblogs.com/zzrblogs/p/11196464.html
「PKUWC2018」随机游走相关推荐
- LOJ#2542. 「PKUWC2018」随机游走
LOJ#2542. 「PKUWC2018」随机游走 题目描述 Solution 去过一个点集中所有节点的期望时间不好求,考虑min−maxmin-maxmin−max容斥,转化为求第一次到达某一个点集 ...
- loj#2542. 「PKUWC2018」随机游走(MinMax容斥 期望dp)
题意 题目链接 Sol 考虑直接对询问的集合做MinMax容斥 设\(f[i][sta]\)表示从\(i\)到集合\(sta\)中任意一点的最小期望步数 按照树上高斯消元的套路,我们可以把转移写成\( ...
- 最值反演[PKUWC2018][loj2542]随机游走
前言 这是学习容斥过程中的一个比较裸的题了 题意简介 题目链接 题目大意 给出一棵nnn个点的树,给出树上的一个点xxx 现在进行QQQ次询问,每次询问一个点集,求从xxx点开始进行随机随机游走,第一 ...
- 【PKUWC2018】随机游走【Min-Max容斥】【树形dp】【FWT】
题意:给一棵nnn个点的无权树和xxx,qqq次询问,每次给定一个点集SSS,询问从xxx开始每次随机走一步,SSS中的每个点至少被经过一次的期望步数. n≤18,q≤5000n\leq 18,q\l ...
- 【LOJ】 #2540. 「PKUWC2018」随机算法
题解 感觉极其神奇的状压dp \(dp[i][S]\)表示答案为i,然后不可选的点集为S 我们每次往答案里加一个点,然后方案数是,设原来可以选的点数是y,新加入一个点后导致了除了新加的点之外x个点不能 ...
- loj#2542 [PKUWC2018]随机游走 (概率期望、组合数学、子集和变换、Min-Max容斥)
loj#2542 [PKUWC2018]随机游走 (概率期望.组合数学.子集和变换.Min-Max容斥) 很好很有趣很神仙的题! 题目链接: https://loj.ac/problem/2542 题 ...
- LOJ #2542 [PKUWC2018]随机游走 (概率期望、组合数学、子集和变换、Min-Max容斥)
很好很有趣很神仙的题! 题目链接: https://loj.ac/problem/2542 题意: 请自行阅读 题解首先我们显然要求的是几个随机变量的最大值的期望(不是期望的最大值),然后这玩意很难求 ...
- 时间序列举例--------协方差+相关系数+随机游走+平稳性
一. 时间序列的影响因素 (1) 长期趋势-------------这个是进行预测的三原则之一 (2) 循环变动或周期性----------------------预测的三原则之一 (3)季节性变动- ...
- KDD 2019 | 结合属性随机游走的图递归网络
今天给大家介绍德克萨斯A&M大学的Xiao Huang等人在KDD 2019发表的一篇文章"Graph Recurrent Networks with Attributed Rand ...
最新文章
- 我在交大的数学建模经验!
- centos开机启动
- Tomcat集群+Nginx反向代理+负载均衡
- 2.1 基础-数字翻转
- php发送邮件smtp源码,php下使用SMTP发邮件的代码
- java ftp上传超时_有关java的ftp上传文件时断网的问题
- mysql是否需要设置外键_数据库到底需不需要设置外键?
- 【辨异】inner, internal, interior, inward
- 数控加工仿真系统 - FANUC OI 车床编程笔记(粗略)
- C#开源代码Newbeecoder.UI控件库极力推荐
- 74HC573的使用方法
- ZJYYC LSH去年买了个表(也是LZY去年买了个表) DFS
- 佛青云多少输出才能过鸿蒙,细节需慎重 现阶段佛青云多种路线选择
- 用户活跃度分析前端java_计算APP用户活跃度的方法及提升活跃度方案
- 方舟无限资源服务器,方舟生存进化无限资源版
- 【迁移学习】PointDAN: A Multi-Scale 3D Domain Adaption Network for Point Cloud Representation
- python数据清洗面试题_利用python进行数据清洗
- 楚留香服务器维护,楚留香手游3月9日维护更新公告
- 2018年Android面试题含答案--适合中高级
- Qt +百度地图+获取返回位置点
热门文章
- c语言数据结构学习心得——线性表
- 【python】解析Excel中使用xlrd库、xlwt库操作,使用xluils库修改Excel文件详解(三)...
- 消息推送与同步协议的思考
- ADB 无线连接设备
- [NOTE]常用Linux命令总结[Thx for commandlinefu]
- One Bug of WatiN?
- 软件工程第一次作业补充
- Thread class vs Runnnable interface(转)
- EditText 被遮挡和显示不全问题
- Delphi XE7 Update1修正列表