LOJ2542. 「PKUWC2018」随机游走
LOJ2542. 「PKUWC2018」随机游走
分析:
- 为了学习最值反演而做的这道题~
- \(max{S}=\sum\limits_{T\subseteq S}(-1)^{|T|-1}min{T}\)
考虑排序后的\(a\)序列。
- \(max{S}=\sum\limits_{T\subseteq S}(-1)^{|T|-1}min{T}\)
- \(\sum\limits_{T\subseteq S}(-1)^{|T|-1}min{T}=\sum\limits_{i=1}^na_i\sum\limits_{j=0}^{n-i}(-1)^j\binom{n-i}{j}\)
- \(\sum\limits_{T\subseteq S}(-1)^{|T|-1}min{T}=\sum\limits_{i=1}^na_i[n-i=0]\)
- \(\sum\limits_{T\subseteq S}(-1)^{|T|-1}min{T}=a_n=max{S}\)
- 设\(f_{s,i}\)表示\(f\)第一次走到\(s\)状态的期望步数。
- 这个东西我们直接枚举\(s\)然后树上高斯消元即可。
- 最后再\(fwt\)一下就能得到反演后的\(min_s\)了。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
using namespace std;
#define mod 998244353
typedef long long ll;
#define N 20
#define M ((1<<18)+50)
int n,head[N],to[N<<1],nxt[N<<1],du[N],rt,m;
int S,Cnt[M],cnt;
inline void add(int u,int v) {to[++cnt]=v; nxt[cnt]=head[u]; head[u]=cnt;}
ll K[N],B[N],inv[N],f[M];
ll qp(ll x,ll y) {
ll re=1;
for(;y;y>>=1,x=x*x%mod)if(y&1)re=re*x%mod;return re;
}
void dfs(int x,int y) {
int i;
if(S&(1<<(x-1))) {K[x]=B[x]=0; return ;}
K[x]=inv[du[x]]; B[x]=1; ll lhs=1;
for(i=head[x];i;i=nxt[i]) if(to[i]!=y) {
dfs(to[i],x);
lhs=(lhs-K[to[i]]*inv[du[x]])%mod;
B[x]=(B[x]+B[to[i]]*inv[du[x]])%mod;
}
lhs=qp(lhs,mod-2);
K[x]=K[x]*lhs%mod; B[x]=B[x]*lhs%mod;
}
void fwt(ll *a,int len) {
int i,j,k,t;
for(k=2;k<=len;k<<=1) for(t=k>>1,i=0;i<len;i+=k) for(j=i;j<i+t;j++) a[j+t]=(a[j+t]+a[j])%mod;
}
int main() {
scanf("%d%d%d",&n,&m,&rt);
int i,x,y;
for(i=1;i<n;i++) {
scanf("%d%d",&x,&y); add(x,y); add(y,x); du[x]++; du[y]++;
}
for(i=1;i<=n;i++) inv[i]=qp(i,mod-2);
int mask=(1<<n)-1;
for(i=0;i<=mask;i++) {
S=i;
dfs(rt,0);
Cnt[i]=Cnt[i>>1]+(i&1);
f[i]=B[rt];
if(!(Cnt[i]&1)) f[i]=-f[i];
}
fwt(f,(1<<n));
while(m--) {
int k,s=0;
scanf("%d",&k);
while(k--) {
scanf("%d",&x); s|=(1<<(x-1));
}
printf("%lld\n",(f[s]+mod)%mod);
}
}
LOJ2542. 「PKUWC2018」随机游走的更多相关文章
- loj2542「PKUWC2018」随机游走
题目描述 给定一棵 nn 个结点的树,你从点 xx 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 QQ 次询问,每次询问给定一个集合 SS,求如果从 xx 出发一直随机游走,直到点集 SS ...
- loj2542 「PKUWC2018」随机游走 【树形dp + 状压dp + 数学】
题目链接 loj2542 题解 设\(f[i][S]\)表示从\(i\)节点出发,走完\(S\)集合中的点的期望步数 记\(de[i]\)为\(i\)的度数,\(E\)为边集,我们很容易写出状态转移方 ...
- LOJ2542. 「PKUWC2018」随机游走【概率期望DP+Min-Max容斥(最值反演)】
题面 思路 我们可以把到每个点的期望步数算出来取max?但是直接算显然是不行的 那就可以用Min-Max来容斥一下 设\(g_{s}\)是从x到s中任意一个点的最小步数 设\(f_{s}\)是从x到s ...
- loj2542 「PKUWC2018」随机游走 MinMax 容斥+树上高斯消元+状压 DP
题目传送门 https://loj.ac/problem/2542 题解 肯定一眼 MinMax 容斥吧. 然后问题就转化为,给定一个集合 \(S\),问期望情况下多少步可以走到 \(S\) 中的点. ...
- Loj #2542. 「PKUWC2018」随机游走
Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...
- 「PKUWC2018」随机游走(min-max容斥+FWT)
「PKUWC2018」随机游走(min-max容斥+FWT) 以后题目都换成这种「」形式啦,我觉得好看. 做过重返现世的应该看到就想到 \(min-max\) 容斥了吧. 没错,我是先学扩展形式再学特 ...
- 【LOJ2542】「PKUWC2018」随机游走
题意 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次询问给定一个集合 \(S\),求如果从 \(x\) 出发一 ...
- LOJ #2542「PKUWC2018」随机游走
$ Min$-$Max$容斥真好用 $ PKUWC$滚粗后这题一直在$ todolist$里 今天才补掉..还要更加努力啊.. LOJ #2542 题意:给一棵不超过$ 18$个节点的树,$ 5000 ...
- 「PKUWC2018」随机游走
题目 我暴力过啦 看到这样的东西我们先搬出来\(min-max\)容斥 我们设\(max(S)\)表示\(x\)到达点集\(S\)的期望最晚时间,也就是我们要求的答案了 显然我们也很难求出这个东西,但 ...
随机推荐
- Git版本控制系统VCS
Git版本控制系统VCS 一.版本控制系统基本情况说明 版本控制是一种记录一个或者若干个文件内容的变化,以便将来查阅特定版本修订情况的系统 1.作用 记录文件的所有历史变化 随时可回复到任何一个历史状 ...
- LeetCode: Keyboard Row
代码长了些,但还是比较简单的 public class Solution { public String[] findWords(String[] words) { List<String> ...
- UnsatisfiedLinkError X.so is 64-bit instead of 32-bit之Android 64 bit SO加载机制
http://blog.csdn.net/canney_chen/article/details/50633982 今天用户反馈应用闪退崩溃了.然后找呀找… 过程原来是这样的: 还是说下项目背景 应用 ...
- [POI2008]砖块Klo
题目 爆炸\(OJ\)机子太慢了吧实在不想打平衡树了 做法 烂大街的一个概念:求中位数 然后求前缀差和后缀差,主席树模板题 注意\(int\)和\(long long\) My complete co ...
- 三、golang时间、流程控、函数
一.本篇内容 1.string和strconv使用 2.go中的时间和日期类型 3.流程控制 4.函数讲解 二.string和strconv使用 1. string.HasPrefix(s trin ...
- linux系统怎么截图?linux系统中对指定区域进行截图的详细教程
windows系统的截图相当简单,方法也很多,但是linux下截图已经成为了一个老大难问题,在windows下用惯了qq截图,到了linux下没了qq,那要怎么办呢,prt sc sysrq 键全屏截 ...
- RDLC 微软报表 自定义函数
报表的空白处点右键,报表属性,CODE,按下面的格式输入自定义函数: Shared Function ShowDate(value as DateTime) as string if value< ...
- Mybatis映射配置文件Mapper.xml详解
1.概述: MyBatis 的真正强大在于它的映射语句,也是它的魔力所在. 2.常用的属性 常用的几个属性: select元素:代表查询,类似的还有update.insert.delete id:这个 ...
- dependencies devDependencies peerDependencies optionalDependencies区别
原文链接: https://zhuanlan.zhihu.com/p/29855253 在一个Node.js项目中,package.json几乎是一个必须的文件,它的主要作用就是管理项目中所使用到的外 ...
- CSS3的transform属性
CSS3的一些属性可能比较新,有一些书从国外翻译到国内的时间上会延缓1-2年.所以有一些东西还需要及时整理. 下面说一下CSS3的一个属性:transform 其实字面上的意思已经很明显了就是变化,变 ...