LOJ#2542 随机游走


解:首先minmax容斥变成经过集合t的第一个点就停止的期望步数。对于某个t,设从x开始的期望步数为f(x)
如果x∈t,f(x) = 0。否则f(x) = ∑f(y) / in[x] + 1
树上高斯消元。从叶子往上,可以发现每个点都可以表示为Af(fa) + B
于是我们推一波式子,参考,就可以对每个t,O(n)求出f(root)。
然后每个询问就枚举子集。
注意DFS的时候可以剪枝,遇到x∈t就返回,否则T飞.....
#include <bits/stdc++.h>
const int N = , MO = ;
inline void read(int &x) {
x = ;
char c = getchar();
while(c < '' || c > '') c = getchar();
while(c >= '' && c <= '') {
x = x * + c - ;
c = getchar();
}
return;
}
struct Edge {
int nex, v;
}edge[N << ]; int tp;
int n, rt, e[N], A[N], B[N], now, in[N], ans[ << ], cnt[ << ], ans2[ << ];
inline int qpow(int a, int b) {
int ans = ;
a = (a + MO) % MO;
while(b) {
if(b & ) ans = 1ll * ans * a % MO;
a = 1ll * a * a % MO;
b = b >> ;
}
return ans;
}
inline void add(int x, int y) {
tp++;
edge[tp].v = y;
edge[tp].nex = e[x];
e[x] = tp;
return;
}
void DFS(int x, int f) {
if((( << (x - )) | now) == now) {
A[x] = B[x] = ;
return;
}
int sa = , sb = ;
for(int i = e[x]; i; i = edge[i].nex) {
int y = edge[i].v;
if(y == f) continue;
DFS(y, x);
sa = (sa + A[y]) % MO;
sb = (sb + B[y]) % MO;
}
A[x] = qpow(in[x] - sa, MO - );
B[x] = 1ll * A[x] * (in[x] + sb) % MO;
return;
}
int main() {
int q;
read(n); read(q); read(rt);
for(register int i = , x, y; i < n; i++) {
read(x); read(y);
add(x, y); add(y, x);
in[x]++; in[y]++;
}
int lm = << n;
/*for(now = 1; now < lm; now++) {
//memset(A, )
DFS(rt, 0);
ans[now] = B[rt];
}*/
memset(ans, -, sizeof(ans));
memset(ans2, -, sizeof(ans2));
for(register int i = ; i < lm; i++) {
cnt[i] = + cnt[i - (i & (-i))];
}
/// prework OVER
for(register int i = , k; i <= q; i++) {
read(k);
int s = ;
for(register int j = , x; j <= k; j++) {
read(x);
s |= ( << (x - ));
}
int Ans = ;
if(ans2[s] != -) {
Ans = ans2[s];
}
else {
for(register int t = s; t; t = (t - ) & s) {
if(ans[t] == -) {
now = t;
DFS(rt, );
ans[t] = B[rt];
}
if(cnt[t] & ) Ans = (Ans + ans[t]) % MO;
else Ans = (Ans - ans[t] + MO) % MO;
}
ans2[s] = Ans;
}
printf("%d\n", (Ans + MO) % MO);
}
return ;
}
AC代码
LOJ#2542 随机游走的更多相关文章
- loj 2542 随机游走 —— 最值反演+树上期望DP+fmt
题目:https://loj.ac/problem/2542 因为走到所有点的期望就是所有点期望的最大值,所以先最值反演一下,问题变成从根走到一个点集任意一点就停止的期望值: 设 \( f[x] \) ...
- Loj #2542. 「PKUWC2018」随机游走
Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...
- LOJ #2542. 「PKUWC 2018」随机游走(最值反演 + 树上期望dp + FMT)
写在这道题前面 : 网上的一些题解都不讲那个系数是怎么推得真的不良心 TAT (不是每个人都有那么厉害啊 , 我好菜啊) 而且 LOJ 过的代码千篇一律 ... 那个系数根本看不出来是什么啊 TAT ...
- 【LOJ#2542】[PKUWC2018]随机游走(min-max容斥,动态规划)
[LOJ#2542][PKUWC2018]随机游走(min-max容斥,动态规划) 题面 LOJ 题解 很明显,要求的东西可以很容易的进行\(min-max\)容斥,那么转为求集合的\(min\). ...
- LOJ #2542「PKUWC2018」随机游走
$ Min$-$Max$容斥真好用 $ PKUWC$滚粗后这题一直在$ todolist$里 今天才补掉..还要更加努力啊.. LOJ #2542 题意:给一棵不超过$ 18$个节点的树,$ 5000 ...
- LOJ #2542 [PKUWC2018]随机游走 (概率期望、组合数学、子集和变换、Min-Max容斥)
很好很有趣很神仙的题! 题目链接: https://loj.ac/problem/2542 题意: 请自行阅读 题解首先我们显然要求的是几个随机变量的最大值的期望(不是期望的最大值),然后这玩意很难求 ...
- [LOJ#2542] [PKUWC2018] 随机游走
题目描述 给定一棵 n 个结点的树,你从点 x 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 Q 次询问,每次询问给定一个集合 S,求如果从 x 出发一直随机游走,直到点集 S 中所有点都 ...
- LOJ2542. 「PKUWC2018」随机游走
LOJ2542. 「PKUWC2018」随机游走 https://loj.ac/problem/2542 分析: 为了学习最值反演而做的这道题~ \(max{S}=\sum\limits_{T\sub ...
- 【Matlab】随机游走产生图像效果
随机游走类似布朗运动,就是随机的向各个方向走吧.产生的图像实在漂亮,所以还是贴出分享. clear all; close all; clc; n=100000; x= 0; y= 0; pixel=z ...
随机推荐
- Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念(转)
PO(persistant object) 持久对象 在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了.通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理.可以 ...
- zsh & tree & macOS
zsh & tree & macOS https://unix.stackexchange.com/questions/22803/counting-files-in-leaves-o ...
- VS Code & MacOS & Zsh
VS Code & MacOS & Zsh https://code.visualstudio.com/docs/setup/mac solution OK bug $ cat .zs ...
- 老男孩python学习自修【第二天】字符串用法
实时处理增量日志最佳实践 主要使用f.seek()和f.tell()实现 字符串处理函数: s.find(substr, start, end) 查找子字符串,找不到则返回-1,找到则返回对应的索引 ...
- freemarker -include
在ftl中使用<#include >时 ,页面被强制显示 需要在struts.xml增加跳转type ,或则可以加同一<result-types></result-typ ...
- xml-dtd
dtd用于校验XML的语法. dtd步骤: 1.看XML中有多少个元素,有几个元素,在dtd文件中写几个<!ELEMENT> 2.判断元素是简单元素还是复杂元素 -复杂元素:有子元素的元素 ...
- 用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则
转载请注明出处:http://www.codelast.com/ line search(一维搜索,或线搜索)是最优化(Optimization)算法中的一个基础步骤/算法.它可以分为精确的一维搜索以 ...
- 吴恩达deeplearning之CNN—卷积神经网络
https://blog.csdn.net/ice_actor/article/details/78648780 个人理解: 卷积计算的过程其实是将原始的全连接换成了卷积全连接,每个kernel为对应 ...
- 基于docker部署使用ELK+FileBeat日志管理平台
Docker从狭义上来讲就是一个进程,从广义上来讲是一个虚拟容器,专业叫法为 Application Container(应用容器).Docker进程和普通的进程没有任何区别,它就是一个普通的应用进程 ...
- 洛谷P1360 [USACO07MAR]黄金阵容均衡题解
题目 不得不说这个题非常毒瘤. 简化题意 这个题的暴力还是非常好想的,完全可以过\(50\%\)的数据.但是\(100\%\)就很难想了. 因为数据很大,所以我们需要用\(O(\sqrt n)\)的时 ...