[Contest20180116]随机游走
题意:给一棵树,多次询问$a$到$b$期望步数,每一步都是随机的
对期望DP了解更深入了一些
先预处理$up_x$表示从$x$走到$fa_x$的期望步数
可以直接往上走,也可以先去儿子再回来,设$x$的度数为$d_x$
所以$up_x=\dfrac{1}{d_x}+\sum\limits_{p\in son_x}\dfrac{1}{d_x}\left(1+up_p+up_x\right)$
整理得$up_x=d_x+\sum\limits_{p\in son_x}up_p$
再预处理$down_x$表示从$fa_x$走到$x$的期望步数
可以直接往下走,也可以先去其他儿子再回来,也可以先去爷爷再回来
所以$down_x=\dfrac{1}{d_x}+\dfrac{1}{d_x}\left(1+down_{fa_x}+down_x\right)+\sum\limits_{\substack{p\in son_{fa_x}\\p\ne x}}\dfrac{1}{d_x}\left(1+up_p+down_x\right)$
整理得$down_x=down_{fa_x}+up_{fa_x}-up_x$
dp求出$up$和$down$之后求前缀和,用倍增求lca,一上一下的期望直接加起来即可
#include<stdio.h> #define ll long long int to[200010],nex[200010],h[100010],d[100010],dep[100010],fa[100010][17],tot; ll up[100010],dn[100010]; void add(int a,int b){ tot++; to[tot]=b; nex[tot]=h[a]; h[a]=tot; } void dfs1(int x){ up[x]=d[x]; for(int i=h[x];i;i=nex[i]){ if(to[i]!=fa[x][0]){ fa[to[i]][0]=x; dep[to[i]]=dep[x]+1; dfs1(to[i]); up[x]+=up[to[i]]; } } } void dfs2(int x){ for(int i=h[x];i;i=nex[i]){ if(to[i]!=fa[x][0]){ dn[to[i]]=dn[x]+up[x]-up[to[i]]; dfs2(to[i]); } } } void dfs3(int x){ for(int i=h[x];i;i=nex[i]){ if(to[i]!=fa[x][0]){ up[to[i]]+=up[x]; dn[to[i]]+=dn[x]; dfs3(to[i]); } } } void swap(int&a,int&b){a^=b^=a^=b;} int lca(int x,int y){ int i; if(dep[x]<dep[y])swap(x,y); for(i=16;i>=0;i--){ if(dep[fa[x][i]]>=dep[y])x=fa[x][i]; } if(x==y)return x; for(i=16;i>=0;i--){ if(fa[x][i]!=fa[y][i]){ x=fa[x][i]; y=fa[y][i]; } } return fa[x][0]; } int main(){ int n,m,i,j,a,b; scanf("%d",&n); for(i=1;i<n;i++){ scanf("%d%d",&a,&b); d[a]++; d[b]++; add(a,b); add(b,a); } dep[1]=1; dfs1(1); for(j=1;j<17;j++){ for(i=1;i<=n;i++)fa[i][j]=fa[fa[i][j-1]][j-1]; } dfs2(1); dfs3(1); scanf("%d",&m); while(m--){ scanf("%d%d",&a,&b); j=lca(a,b); printf("%lld\n",up[a]-up[j]+dn[b]-dn[j]); } }
[Contest20180116]随机游走的更多相关文章
- 【Matlab】随机游走产生图像效果
随机游走类似布朗运动,就是随机的向各个方向走吧.产生的图像实在漂亮,所以还是贴出分享. clear all; close all; clc; n=100000; x= 0; y= 0; pixel=z ...
- 介绍一个全局最优化的方法:随机游走算法(Random Walk)
1. 关于全局最优化求解 全局最优化是一个非常复杂的问题,目前还没有一个通用的办法可以对任意复杂函数求解全局最优值.上一篇文章讲解了一个求解局部极小值的方法--梯度下降法.这种方法对于求解精度不高 ...
- Loj #2542. 「PKUWC2018」随机游走
Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...
- LOJ #2542. 「PKUWC 2018」随机游走(最值反演 + 树上期望dp + FMT)
写在这道题前面 : 网上的一些题解都不讲那个系数是怎么推得真的不良心 TAT (不是每个人都有那么厉害啊 , 我好菜啊) 而且 LOJ 过的代码千篇一律 ... 那个系数根本看不出来是什么啊 TAT ...
- 【LOJ2542】【PKUWC 2018】随机游走 min-max容斥 树上高斯消元
题目描述 有一棵 \(n\) 个点的树.你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(q\) 次询问,每次询问给定一个集合 \(S\),求如果从 \(x\) 出发一 ...
- [PKUWC2018] 随机游走
Description 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次询问给定一个集合 \(S\),求如果从 ...
- 【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 ...
- 「PKUWC2018」随机游走(min-max容斥+FWT)
「PKUWC2018」随机游走(min-max容斥+FWT) 以后题目都换成这种「」形式啦,我觉得好看. 做过重返现世的应该看到就想到 \(min-max\) 容斥了吧. 没错,我是先学扩展形式再学特 ...
随机推荐
- Angular 遍历循环数组
var app = angular.module('Mywind',['ui.router']) app.controller('Myautumn',function($scope,$http,$fi ...
- 跨域请求json数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- shell编程 if 注意事项
read -n 1 -p "Let's go(y or n):" if [ "$REPLY"x = "y"x -o "$REPLY ...
- 学习正则表达式及c#应用
1.0正则表达式语法 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”).模式描述在搜索文本时要匹配的一个或多个字符串. 正则表达式示例 表达式 ...
- BZOJ 4206: 最大团
4206: 最大团 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 91 Solved: 36[Submit][Status][Discuss] De ...
- 【20160815】noip模拟(未完)
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #inc ...
- UITableView学习之辨析两个方法:⓵dequeueReusableCellWithIdentifier与⓶dequeueReusableCellWithIdentifier:forIndexPath:
使用storyboard显示UITableView时,如果不修改系统默认生成的tableView:cellForRowAtIndexPath:方法中的代码,必须为UITableViewCell注册(填 ...
- 搭建 Linux 下 GitLab 服务器【转】
转自:http://blog.csdn.net/passion_wu128/article/details/8216086 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 平台 ...
- Kuangbin 带你飞-线段树专题 题解
HDU 1166 敌兵布阵 单调更新区间查询和 #include <map> #include <set> #include <list> #include < ...
- UVALIVE 4330 Timer
Description Recently, some archaeologists discovered an ancient relic on a small island in the Pac ...