「PKUWC2018」随机游走(min-max容斥+FWT)
「PKUWC2018」随机游走(min-max容斥+FWT)
以后题目都换成这种「」形式啦,我觉得好看。
做过重返现世的应该看到就想到 \(min-max\) 容斥了吧。
没错,我是先学扩展形式再学特殊形式的。
\]
问题转化之后,然后我们可以枚举所有状态然后 \(O(n)\) 树形 \(dp\)
\(-1\) 那项可以 \(O(2^n)\) 推出来,接下来就是子集变换了。可以 \(O(n2^n)\) \(FWT\) 或者 \(O(3^n)\) 暴力枚举,自己喜欢哪种就上吧。
\(Code\ Below:\)
#include <bits/stdc++.h>
using namespace std;
const int mod=998244353;
int n,q,rt,lim,bin[20],a[20],b[20],d[20],f[1<<18],g[1<<18];
vector<int> G[20];
inline int fpow(int a,int b){
	int ret=1;
	for(;b;b>>=1,a=1ll*a*a%mod)
		if(b&1) ret=1ll*ret*a%mod;
	return ret;
}
void dfs(int x,int f,int S){
	if(S&bin[x]) return ;
	a[x]=d[x];b[x]=1;
	int tmp=1,y;
	vector<int>::iterator it;
	for(it=G[x].begin();it!=G[x].end();it++){
		y=*it;
		if(y==f) continue;
		dfs(y,x,S);
		tmp=(tmp-1ll*a[y]*d[x]%mod+mod)%mod;
		b[x]=(b[x]+1ll*b[y]*d[x]%mod)%mod;
	}
	tmp=fpow(tmp,mod-2);
	a[x]=1ll*a[x]*tmp%mod;
	b[x]=1ll*b[x]*tmp%mod;
}
inline void FWT(){
	for(int len=1;len<lim;len<<=1)
		for(int i=0;i<lim;i++)
			if(i&len) f[i]=(f[i]+f[i^len])%mod;
}
int main()
{
	scanf("%d%d%d",&n,&q,&rt);
	rt--;lim=1<<n;bin[0]=1;
	for(int i=1;i<=n;i++) bin[i]=bin[i-1]<<1;
	int x,y,k,S;
	for(int i=0;i<n-1;i++){
		scanf("%d%d",&x,&y);
		x--;y--;
		G[x].push_back(y);
		G[y].push_back(x);
		d[x]++;d[y]++;
	}
	for(int i=0;i<n;i++) d[i]=fpow(d[i],mod-2);
	for(int i=0;i<lim;i++){
		for(int j=0;j<n;j++) a[j]=b[j]=0;
		dfs(rt,-1,i);f[i]=b[rt];
	}
	g[0]=-1;
	for(int i=1;i<lim;i++) g[i]=g[i>>1]*((i&1)?-1:1);
	for(int i=0;i<lim;i++){
		f[i]*=g[i];
		if(f[i]<0) f[i]+=mod;
	}
	FWT();
	while(q--){
		scanf("%d",&k);S=0;
		for(int i=1;i<=k;i++){
			scanf("%d",&x);
			S|=bin[x-1];
		}
		printf("%d\n",f[S]);
	}
	return 0;
}
「PKUWC2018」随机游走(min-max容斥+FWT)的更多相关文章
- Loj #2542. 「PKUWC2018」随机游走
		Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ... 
- LOJ2542. 「PKUWC2018」随机游走
		LOJ2542. 「PKUWC2018」随机游走 https://loj.ac/problem/2542 分析: 为了学习最值反演而做的这道题~ \(max{S}=\sum\limits_{T\sub ... 
- LOJ #2542「PKUWC2018」随机游走
		$ Min$-$Max$容斥真好用 $ PKUWC$滚粗后这题一直在$ todolist$里 今天才补掉..还要更加努力啊.. LOJ #2542 题意:给一棵不超过$ 18$个节点的树,$ 5000 ... 
- 「PKUWC2018」随机游走
		题目 我暴力过啦 看到这样的东西我们先搬出来\(min-max\)容斥 我们设\(max(S)\)表示\(x\)到达点集\(S\)的期望最晚时间,也就是我们要求的答案了 显然我们也很难求出这个东西,但 ... 
- loj2542「PKUWC2018」随机游走
		题目描述 给定一棵 nn 个结点的树,你从点 xx 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 QQ 次询问,每次询问给定一个集合 SS,求如果从 xx 出发一直随机游走,直到点集 SS ... 
- 【LOJ2542】「PKUWC2018」随机游走
		题意 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次询问给定一个集合 \(S\),求如果从 \(x\) 出发一 ... 
- 洛谷 P5643 - [PKUWC2018]随机游走(Min-Max 容斥+FWT+树上高斯消元,hot tea)
		题面传送门 一道挺综合的 hot tea,放到 PKUWC 的 D2T2 还挺喜闻乐见的( 首先我们考虑怎样对一个固定的集合 \(S\) 计算答案,注意到我们要求的是一个形如 \(E(\max(S)) ... 
- loj#2542. 「PKUWC2018」随机游走(树形dp+Min-Max容斥)
		传送门 首先,关于\(Min-Max\)容斥 设\(S\)为一个点的集合,每个点的权值为走到这个点的期望时间,则\(Max(S)\)即为走遍这个集合所有点的期望时间,\(Min(S)\)即为第一次走到 ... 
- LOJ2542. 「PKUWC2018」随机游走【概率期望DP+Min-Max容斥(最值反演)】
		题面 思路 我们可以把到每个点的期望步数算出来取max?但是直接算显然是不行的 那就可以用Min-Max来容斥一下 设\(g_{s}\)是从x到s中任意一个点的最小步数 设\(f_{s}\)是从x到s ... 
随机推荐
- mezzanine的page_menu tag(二)
			dict的特性,key可以是None >>> def f(): a=[2,3] return a #函数返回local变量 >>> a=f() >>&g ... 
- 深度学习原理与框架-Tfrecord数据集的制作  1.tf.train.Examples(数据转换为二进制)  3.tf.image.encode_jpeg(解码图片加码成jpeg) 4.tf.train.Coordinator(构建多线程通道) 5.threading.Thread(建立单线程) 6.tf.python_io.TFR(TFR读入器)
			1. 配套使用: tf.train.Examples将数据转换为二进制,提升IO效率和方便管理 对于int类型 : tf.train.Examples(features=tf.train.Featur ... 
- 在centos上面编译安装python
			前言 因为在学习storm的过程中需要安装python,storm是部署在linux上面的,所以需要将python安装在linux上面. 安装准备 python下载 官网链接:https://www. ... 
- json介绍和使用
			最近在开发时需要用到json,所以在各种寻找json相关的博客,恰巧在博客园里就有一篇写的很不错的,在这里推荐下:http://www.cnblogs.com/Truly/archive/2006/1 ... 
- Linux shell : 管道 |
			概念 意义 理解 用法 返回值 PIPESTATUS An array variable (see Arrays) containing a list of exit status values fr ... 
- Lock关键字
			public abstract class CountBase { public abstract void Increment(); public abstract void Decreament( ... 
- linux启动http服务
			1.安装apache yum install httpd #根据提示,输入Y安装即可成功安装 systemctl start httpd.service #启动apache systemctl sto ... 
- 清理xcode
			移除 Xcode 运行安装 APP 产生的缓存文件(DerivedData) ~/Library/Developer/Xcode/DerivedData 移除 APP 打包的ipa历史版本(Archi ... 
- 目前php连接mysql的主要方式
			mysqli和PDO, 其中mysqli可以有面向过程,面向对象两种方式.而pdo只有面向对象的方式. <?php // $mysql_server = "localhost" ... 
- MySQL优化(三) 表的设计
			1.什么样的表才符合3范式(3 NF)? 表的范式,是首先符合1范式,才能满足2范式,进一步才能满足3范式:(现在最高级别是6范式) 第一范式:1NF 是对属性的原子性约束,要求表的属性(列)具有原子 ... 
