【PKUWC2018】随机游走【Min-Max容斥】【树形dp】【FWT】

题意:给一棵nnn个点的无权树和xxxqqq次询问,每次给定一个点集SSS,询问从xxx开始每次随机走一步,SSS中的每个点至少被经过一次的期望步数。

n≤18,q≤5000n\leq 18,q\leq 5000n18,q5000

题目求的相当于是SSS中的所有点 第一次被访问的时间 的最大值 的期望,发现nnn很小,可以Min-Max容斥成第一次到SSS 中任意一个点的期望时间。

然后考虑 dp。设xxx为根,fuf_ufu表示从uuu开始到SSS中任意一个点的期望时间。

fu=1degu(ffau+∑v∈sonufv)+1f_u=\frac{1}{deg_u}(f_{fa_u}+\sum _{v\in son_u}f_v)+1fu=degu1(ffau+vsonufv)+1

degu⋅fu=ffau+∑v∈sonufv+degudeg_u\cdot f_u=f_{fa_u}+\sum _{v\in son_u}f_v+deg_udegufu=ffau+vsonufv+degu

一个套路,待定系数法设fu=kuffau+buf_u=k_uf_{fa_u}+b_ufu=kuffau+bu

degu⋅fu=ffau+∑v∈sonu(kvfu+bv)+degudeg_u\cdot f_u=f_{fa_u}+\sum _{v\in son_u}(k_vf_u+b_v)+deg_udegufu=ffau+vsonu(kvfu+bv)+degu

(degu−∑kv+1)⋅fu=ffau+∑bv+degu(deg_u-\sum k_v+1)\cdot f_u=f_{fa_u}+\sum b_v+deg_u(degukv+1)fu=ffau+bv+degu

解得

kv=1degu−∑kv+1k_v=\frac{1}{deg_u-\sum k_v+1}kv=degukv+11

bv=∑bv+degudegu−∑kv+1b_v=\frac{\sum b_v+deg_u}{deg_u-\sum k_v+1}bv=degukv+1bv+degu

如果u∈Su\in SuS,有fu=0f_u=0fu=0,对它的父亲没有贡献,直接ku=bu=0k_u=b_u=0ku=bu=0

SSS的答案就是fx=bxf_x=b_xfx=bx,乘上容斥系数再FWT一下就可以快速回答询问

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <vector>
using namespace std;
const int MOD=998244353;
typedef long long ll;
inline int qpow(int a,int p)
{int ans=1;while (p){if (p&1) ans=(ll)ans*a%MOD;a=(ll)a*a%MOD,p>>=1;}return ans;
}
#define inv(x) qpow(x,MOD-2)
inline int add(const int& x,const int& y){return x+y>=MOD? x+y-MOD:x+y;}
inline int dec(const int& x,const int& y){return x<y? x-y+MOD:x-y;}
int k[20],b[20];
vector<int> e[20];
void dfs(int u,int f,int S)
{if (S&(1<<u)) return (void)(k[u]=b[u]=0);int sumk=0,sumb=0;for (int i=0;i<(int)e[u].size();i++)if (e[u][i]!=f)dfs(e[u][i],u,S),sumk=add(sumk,k[e[u][i]]),sumb=add(sumb,b[e[u][i]]);k[u]=inv(dec((int)e[u].size(),sumk)),b[u]=((ll)e[u].size()+sumb)*k[u]%MOD;
}
int f[1<<20];
int main()
{int n,q,x;scanf("%d%d%d",&n,&q,&x);for (int i=1;i<n;i++){int u,v;scanf("%d%d",&u,&v);e[u].push_back(v),e[v].push_back(u);}for (int S=1;S<(1<<n);S++){dfs(x,0,S<<1);f[S]=b[x];int c=0;for (int i=0;i<n;i++) c^=(S>>i)&1;if (!c) f[S]=dec(0,f[S]);}for (int l=0;l<n;l++){int mid=1<<l,len=mid<<1;for (int s=0;s<(1<<n);s+=len)for (int k=0;k<mid;k++)f[s+mid+k]=add(f[s+mid+k],f[s+k]);}while (q--){int S=0;int k;scanf("%d",&k);for (int i=1;i<=k;i++){int x;scanf("%d",&x);S|=1<<x;}printf("%d\n",f[S>>1]);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314998.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LogoSharp:Logo语言的C#实现

上周在朋友中问了一圈&#xff0c;发现没有几个人知道Logo语言的&#xff0c;或许&#xff0c;这门古老的语言现在用的人已经非常少了&#xff0c;除了国外有少量的用户将Logo语言用于教育外&#xff0c;估计国内不会有人使用这门语言。其实&#xff0c;Logo语言本来也就是以编…

hdu 6899 Xor 数位dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 问你有多少对x,yx,yx,y满足以下条件&#xff1a; (1)x∈[0,A],y∈[0,B](1)x \in [0,A],y\in [0,B](1)x∈[0,A],y∈[0,B] (2)∣x−y∣≤K(2)|x-y|\le K(2)∣x−y∣≤K (3)xxory≤W(3)x \ \ xor \ \ y\le W(3)…

【PKUWC2018】Minimax【线段树合并】

题意&#xff1a;给定一棵nnn个点的二叉树&#xff0c;叶子的权值输入给定且互不相同&#xff0c;非叶子结点iii的权值有pip_ipi​的概率为儿子结点权值最大值&#xff0c;1−pi1-p_i1−pi​的概率为最小值。求根结点取每种值的概率。模998244353998244353998244353。 n≤3105n…

对数位dp的一些拙见

这不是一篇介绍数位dpdpdp的文章&#xff0c;只是我思考后的一些记录&#xff0c;怕以后就忘记了。 由于博主太菜不会组合数学&#xff0c;以下数位dpdpdp均采用记忆化搜索的方式。 首先最重要的就是状态设计了&#xff0c;正常来说数位dpdpdp的状态设计需要包含数的结构和状态…

Hello Kubernetes快速交互实验手册

“ K8S在线实验室提供了一个交互实验环境&#xff0c;现将这部分文章精简并翻译为中文&#xff0c;希望对那些不了解K8S的童鞋有帮助&#xff0c;能够快速玩起来有个感性认识...”原文&#xff1a;https://kubernetes.io/docs/tutorials翻译&#xff1a;Edison ZhouHello Kuber…

【ZJOI2018】历史【结论】【LCT思想】

题意&#xff1a;一棵nnn个点的树&#xff0c;每个点有权值aia_iai​&#xff0c;初始时给定。维护&#xff1a; 单点权值加上一个正数。 询问每个点恰好执行aia_iai​次 access 操作&#xff0c;任意安排顺序的条件下切换轻重链总次数的最大值。 n≤4105n\leq 4\times 10^5n…

2020 ICPC 上海 Sum of Log 数位dp + 状态剪枝

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 观察可以发现&#xff0c;由于i&j0i \And j0i&j0&#xff0c;所以log2(ij)log_2(ij)log2​(ij)表示的应该是ijijij的111的最高位。 一个显然的dpdpdp状态就出来了f[pos][flag1][fl…

从MVP到微软产品经理的几点心得

昨天&#xff0c;我应邀在微软2019年暑期实习生的入职培训活动上做了一个简短的分享 —— 以我自身的职业发展过程为例&#xff0c;给大家讲了一讲我是怎样从一个技术爱好者&#xff0c;到获得第一个MVP&#xff08;微软最有价值专家&#xff09;的荣誉奖项&#xff0c;以及后来…

【UOJ188】 Sanrd【类min_25筛】

题意&#xff1a;设f(i)f(i)f(i)表示iii的不严格次大质因子&#xff08;没有为000&#xff09;&#xff0c;求∑ilrf(i)\sum_{il}^rf(i)∑ilr​f(i) l≤r≤1011l\leq r\leq10^{11}l≤r≤1011 这种和质因数有关的奇奇怪怪的函数的前缀和可以试试魔改min_25筛 设 S(n,j)∑i2n[m…

小白开学Asp.Net Core 《六》 —— 探究.Net Core 跨平台的奥秘

1、写这篇文章的初衷有好多朋友反馈看不懂我写的开源的一个练手项目&#xff08;GitHub&#xff1a;https://github.com/AjuPrince/Aju.Carefree&#xff09;也有好多人都希望我能写一些简单的入门的文章&#xff0c;记得前几天在群里有人问为什么 .Net Core 能跨平台&#xff…

Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 首先有一个显然的性质就是每组操作最多不会超过两次。 很容易想到一个很暴力的思路&#xff0c;就是枚举x∈[1,2∗k]x \in [1,2*k]x∈[1,2∗k]&#xff0c;让后判断一下每组需要操作几次取…

C#8.0: 在 LINQ 中支持异步的 IAsyncEnumerableT接口

C# 8.0中&#xff0c;提供了一种新的IAsyncEnumerable<T>接口&#xff0c;在对集合进行迭代时&#xff0c;支持异步操作。比如在读取文本中的多行字符串时&#xff0c;如果读取每行字符串的时候使用同步方法&#xff0c;那么会导致线程堵塞。IAsyncEnumerable<T>可…

SCOI2020游记

考试期间发现只有T1看起来可做&#xff0c;脑子发麻硬刚5小时&#xff0c;最后还是只交了40分暴力 考完后用一节数学课口胡出了T2 100pts和T3 80pts&#xff0c;并且发现只有T1不会做 退役了&#xff0c;告辞

Codeforces Round #636 (Div. 3) E. Weights Distributing 思维 + bfs

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤2e5,m≤2e5n\le2e5,m\le2e5n≤2e5,m≤2e5 思路&#xff1a; 怎么感觉每场div3div3div3都有一个巧妙的图论题。 首先如果只有两个点的话&#xff0c;肯定是一次bfsbfsbfs之后取前disdisdis小的www作为边权…

解读 Microsoft.NET.Sdk 的源码,你能定制各种奇怪而富有创意的编译过程

在 csproj 中&#xff0c;Project 中的 Sdk 属性是 MSBuild 15.0 开始支持的&#xff0c;也就是 Visual Studio 2017 开始支持。有了 Sdk 属性的存在&#xff0c;MSBuild 编译过程能够扩展得非常强大&#xff0c;而不止是过去 Import 的一个 props 和 targets 文件。本文将介绍…

【省选2020A卷】作业题【矩阵树】【扩域】【莫比乌斯反演】

传送门 为什么世界上会有这么傻的题啊……我佛了 很显然就是矩阵树强行缝合莫反 设f(n)f(n)f(n)表示所有边权gcd⁡\gcdgcd为nnn的生成树权值和&#xff0c;g(d)g(d)g(d)表示所有边权都是 ddd的倍数的生成树权值和 g(d)∑d∣nf(n)g(d)\sum_{d\mid n}f(n)g(d)d∣n∑​f(n) f(d…

Libre OJ 「BalticOI 2013」非回文数 数位dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 问[l,r][l,r][l,r]内有多少个数是非回文数&#xff0c;即数字中不存在连续几个数为回文数。 l,r≤1e18l,r\le1e18l,r≤1e18 思路&#xff1a; 这么大的范围很明显数位dpdpdp了&#xff0c;容易知道当一个数…

《ASP.NET Core 微服务实战》译者序

最近&#xff0c;我将《ASP.NET Core 微服务实战》一书由英文翻译为中文。这本书是由清华大学出版社引进的&#xff0c;目前还处于最后的排版校对过程中&#xff0c;现将该书的译者序发表于此。以下为译者译全文&#xff1a;“微服务”的概念在 2014 年正式提出之后&#xff0c…

【杭电多校2020】Distinct Sub-palindromes【结论】【构造】

题意&#xff1a;长度为nnn的 本质不同的回文子串个数最少 的小写字母组成的字符串 的个数。 n≤109n\leq 10^9n≤109 回文子串个数至少为不同字母的数量 显然 最少回文子串个数为min⁡(n,3)\min(n,3)min(n,3) n≤2n\leq2n≤2显然 n≥3n\geq3n≥3时 构造abcabcabc...\textt…

.NET 云原生技术使用调查

.NET Core 3.0 即将发布RC&#xff0c;.NET Core 3.0默认更好的支持Docker资源限制&#xff0c;官方团队也在努力让.NET Core成为真正的容器运行时&#xff0c;使其在低内存环境中具有容器感知功能并高效运行。GC堆限制.NET Core减少了CoreCLR默认使用的内存&#xff0c;如G0代…