解:首先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 随机游走的更多相关文章

  1. loj 2542 随机游走 —— 最值反演+树上期望DP+fmt

    题目:https://loj.ac/problem/2542 因为走到所有点的期望就是所有点期望的最大值,所以先最值反演一下,问题变成从根走到一个点集任意一点就停止的期望值: 设 \( f[x] \) ...

  2. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

  3. LOJ #2542. 「PKUWC 2018」随机游走(最值反演 + 树上期望dp + FMT)

    写在这道题前面 : 网上的一些题解都不讲那个系数是怎么推得真的不良心 TAT (不是每个人都有那么厉害啊 , 我好菜啊) 而且 LOJ 过的代码千篇一律 ... 那个系数根本看不出来是什么啊 TAT ...

  4. 【LOJ#2542】[PKUWC2018]随机游走(min-max容斥,动态规划)

    [LOJ#2542][PKUWC2018]随机游走(min-max容斥,动态规划) 题面 LOJ 题解 很明显,要求的东西可以很容易的进行\(min-max\)容斥,那么转为求集合的\(min\). ...

  5. LOJ #2542「PKUWC2018」随机游走

    $ Min$-$Max$容斥真好用 $ PKUWC$滚粗后这题一直在$ todolist$里 今天才补掉..还要更加努力啊.. LOJ #2542 题意:给一棵不超过$ 18$个节点的树,$ 5000 ...

  6. LOJ #2542 [PKUWC2018]随机游走 (概率期望、组合数学、子集和变换、Min-Max容斥)

    很好很有趣很神仙的题! 题目链接: https://loj.ac/problem/2542 题意: 请自行阅读 题解首先我们显然要求的是几个随机变量的最大值的期望(不是期望的最大值),然后这玩意很难求 ...

  7. [LOJ#2542] [PKUWC2018] 随机游走

    题目描述 给定一棵 n 个结点的树,你从点 x 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 Q 次询问,每次询问给定一个集合 S,求如果从 x 出发一直随机游走,直到点集 S 中所有点都 ...

  8. LOJ2542. 「PKUWC2018」随机游走

    LOJ2542. 「PKUWC2018」随机游走 https://loj.ac/problem/2542 分析: 为了学习最值反演而做的这道题~ \(max{S}=\sum\limits_{T\sub ...

  9. 【Matlab】随机游走产生图像效果

    随机游走类似布朗运动,就是随机的向各个方向走吧.产生的图像实在漂亮,所以还是贴出分享. clear all; close all; clc; n=100000; x= 0; y= 0; pixel=z ...

随机推荐

  1. AngularJS集合数据遍历显示

    AngularJS集合数据遍历显示 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  2. Golang的interface实践

    这是第二个我在别的语言里面没有见过的实现,go的interface可以说是独树一帜,让我们仔细来实践一下. interface类型是什么?interface类型定义了一组方法,如果某个对象实现了某个接 ...

  3. Linux基础学习(15)--启动管理

    第十五章——启动管理 一.CentOS 6.x启动管理 1.系统运行级别: (1)运行级别: (2)运行级别命令: (3)系统默认运行级别: 2.系统启动过程: . 二.启动引导程序grub 1.Gr ...

  4. 如何在网页中用echarts图表插件做出静态呈现效果

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. python数据结构与算法第十四天【二分查找】

    1.二分查找的原理 对于已经排序的列表进行最快速度的查找 2. 代码实现 (1)递归实现 def binary_search(alist, item): if len(alist) == 0: ret ...

  6. 原型链上的call方法集合

    1. Object.prototype.toString.call(value) // 返回数据的类型 // "[object Object]" 等 2. Array.protot ...

  7. oracle11g安装教程完整版

    来自: https://www.2cto.com/database/201701/588135.html 64位WIN7+oracle11g+plsql安装 1.下载Oracle 11g R2 for ...

  8. 1064 - You have an error in your SQL syntax;

    mysql 1064 错误: SQL语法错误,check the manual that corresponds to your MySQL server version for the right ...

  9. Java 设计模式 ------ 模板设计模式

    模板设计模式主要来源于生活中有一些事情是有模板可以遵循的.举两个生活中的例子,如泡茶和泡咖啡,看一看. 泡茶有以下四个步骤:  1, 烧开水;  2 把茶放到水杯中; 3,倒入开水; 4, 加糖. 泡 ...

  10. codeforces496C

    Removing Columns CodeForces - 496C You are given an n × m rectangular table consisting of lower case ...