LINK:梦中漫步

当然也可以去一本通的Oj/loj上交(loj可能没有..

期望好题。期望和dp往往是在一起的。

前置知识:1. 期望是线性可加的。2.和的期望等于期望的和.

从u出发每次随机选一条边走 问走到v的期望经过的边数。

寒假的时候就在思考这道题了 当时yy了一个LCA乱搞的方法 wa的不省人事。

重新分析:考虑设\(f_i\)表示从u出发到i这个点的期望经过的边数。

列出转移 发现转移有环 暴力高斯消元 显然不可行。

刚才列出的两个知识 和的期望等于期望的和。

这个东西告诉我们 u->v的期望边数=u->fu->ffu->fffu->...v的期望边数。

于是可以设出两个期望数组.

\(f1_x\)表示由x到fx的经过的期望边数。\(f2_x\)表示fx到x的期望边数。

只要求出这个两个数组我们就可以利用求出LCA 求出路径上的这两个数组的和 得到答案。

考虑\(f1\)怎么求 设d表示x的度数\(f1_x=\frac{1}{d}+\sum_{v\in son_x}\frac{1}{d}(1+f1_v+f1_x)\)

化简可得 \(f1_x=d+\sum_{v\in son_x}f1_v\)

考虑\(f2\) 设d表示x的父亲的度数\(f2_x=\frac{1}{d}+\frac{1}{d}(1+f2_{fa}+f2_x)+\sum_{v\in son_x,v\neq x}\frac{1}{d}(1+f1_v+f2_x)\)

化简可得 \(f2_x=d+f2_{fa}+\sum_{v\in son_x,v\neq x}f1_v\)

然后树上取前缀和 求LCA即可O(1)计算答案。

复杂度Qlogn.

const int MAXN=100010;
int n,Q,len;
int du[MAXN],d[MAXN];
int f[MAXN][20],Log[MAXN];
ll f1[MAXN],ans,f2[MAXN];//f1[x]表示由x走到fx的期望边数.f2[x]表示由fx走到x的期望边数.
int lin[MAXN],ver[MAXN<<1],nex[MAXN<<1];
inline void add(int x,int y)
{
ver[++len]=y;
nex[len]=lin[x];
lin[x]=len;++du[y];
}
inline void dfs(int x,int fa)
{
f[x][0]=fa;d[x]=d[fa]+1;
rep(1,Log[d[x]],i)f[x][i]=f[f[x][i-1]][i-1];
f1[x]=du[x];
go(x)if(tn!=fa)dfs(tn,x),f1[x]=(f1[x]+f1[tn])%mod;
}
inline void dp(int x,int fa)
{
if(x!=1)f2[x]=((f2[fa]+f1[fa]-f1[x])%mod+mod)%mod;
go(x)if(tn!=fa)dp(tn,x);
}
inline void dfs(int x)
{
go(x)if(tn!=f[x][0])f1[tn]=(f1[tn]+f1[x])%mod,f2[tn]=(f2[tn]+f2[x])%mod,dfs(tn);
}
inline int LCA(int x,int y)
{
if(d[x]>d[y])swap(x,y);
for(int i=Log[d[y]];i>=0;--i)
if(d[f[y][i]]>=d[x])y=f[y][i];
if(x==y)return x;
for(int i=Log[d[x]];i>=0;--i)
if(f[x][i]!=f[y][i])
x=f[x][i],y=f[y][i];
return f[x][0];
}
int main()
{
freopen("1.in","r",stdin);
//freopen("wanderindream.in","r",stdin);
//freopen("wanderindream.out","w",stdout);
n=read();Q=read();
for(int i=2;i<=n;++i)
{
int x,y;
x=read();y=read();
add(x,y);add(y,x);
Log[i]=Log[i>>1]+1;
}
dfs(1,0);dp(1,0);dfs(1);
for(int i=1;i<=Q;++i)
{
int x,y;
x=read();y=read();
if(x==y){puts("0");continue;}
int lca=LCA(x,y);
ans=f1[x]-f1[lca];
ans=(ans+f2[y]-f2[lca])%mod;
ans=(ans+mod)%mod;
putl(ans);
}
return 0;
}

非常妙的期望。

duoxiao OJ #910 【高手训练】【动态规划】梦中漫步 期望 LCA的更多相关文章

  1. BZOJ 3620: 似乎在梦中见过的样子

    似乎在梦中见过的样子.... 一道水题调了这么久,还半天想不出来怎么 T 的...佩服自己(果然蒟蒻) 这题想想 KMP 但是半天没思路瞟了一眼题解发现暴力枚举起始点,然后 KMP 如图: O( n2 ...

  2. 织梦中在线显示pdf文件的方法

    如何在织梦中添加pdf文件并显示呢?下面这个教程将带领大家来操作.(注:手机版无法查看) 第一步:在系统-系统基本参数-附件设置中添加pdf格式 并且将大小调大 第二步:在核心-内容模型-普通文章中添 ...

  3. 【BZOJ 3620】 3620: 似乎在梦中见过的样子 (KMP)

    3620: 似乎在梦中见过的样子 Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 755  Solved: 445 Description “Madok ...

  4. 【BZOJ3620】似乎在梦中见过的样子 KMP

    [BZOJ3620]似乎在梦中见过的样子 Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka 的一个 ...

  5. BZOJ_3620_似乎在梦中见过的样子_KMP

    BZOJ_3620_似乎在梦中见过的样子_KMP Description “Madoka,不要相信 QB!”伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Modoka ...

  6. ACM_梦中的函数

    梦中的函数 Time Limit: 2000/1000ms (Java/Others) Problem Description: 寒假那段时间,每天刷题的小G连做梦都是代码,于是有了这道题. 给定一个 ...

  7. 【LOJ#6682】梦中的数论(min_25筛)

    [LOJ#6682]梦中的数论(min_25筛) 题面 LOJ 题解 注意题意是\(j|i\)并且\((j+k)|i\), 不难发现\(j\)和\((j+k)\)可以任意取\(i\)的任意因数,且\( ...

  8. 【kmp】似乎在梦中见过的样子

    参考博客: BZOJ 3620: 似乎在梦中见过的样子 [KMP]似乎在梦中见过的样子 题目描述 「Madoka,不要相信QB!」伴随着Homura的失望地喊叫,Madoka与QB签订了契约. 这是M ...

  9. 似乎在梦中见过的样子 (KMP)

    # 10047. 「一本通 2.2 练习 3」似乎在梦中见过的样子 [题目描述] 「Madoka,不要相信 QB!」伴随着 Homura 的失望地喊叫,Madoka 与 QB 签订了契约. 这是 Mo ...

随机推荐

  1. sass安装与教程

    首先下载ruby http://dlsw.baidu.com/sw-search-sp/soft/ff/22711/rubyinstaller_V2.2.2.95_setup.1439890355.e ...

  2. 浅谈.Net Core DependencyInjection源码探究

    前言     相信使用过Asp.Net Core开发框架的人对自带的DI框架已经相当熟悉了,很多刚开始接触.Net Core的时候觉得不适应,主要就是因为Core默认集成它的原因.它是Asp.Net ...

  3. 蕴含式(包含EXISTS语句的分析)

    *{ font-family: STFangSong; outline: none; } 蕴含式 一.蕴含式基础 (Ⅰ)什么是"蕴含式" 设p.q为两个命题.复合命题"如 ...

  4. redis(十九):Redis 架构模式,特点

    单机版 特点:简单 问题: 1.内存容量有限 2.处理能力有限 3.无法高可用. 主从复制 Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的 ...

  5. 数据可视化之powerBI入门(二)体验PowerBI:零基础分分钟生成一份交互报表

    https://zhuanlan.zhihu.com/p/64144595 体验PowerBI:零基础分分钟生成一份交互报表 首先我们准备一份数据,Excel格式 数据是从2006年到2015年10年 ...

  6. 数据可视化实例(十五):有序条形图(matplotlib,pandas)

    偏差 (Deviation) 有序条形图 (Ordered Bar Chart) 有序条形图有效地传达了项目的排名顺序. 但是,在图表上方添加度量标准的值,用户可以从图表本身获取精确信息. https ...

  7. 数据可视化之DAX篇(二十四)Power BI应用技巧:在总计行实现条件格式

    https://zhuanlan.zhihu.com/p/98975646 如何将表格或者矩阵中值的条件格式也应用于总计行? 目前PowerBI并不支持这种功能,无法在总计行或者小计行上应用条件格式, ...

  8. 数据可视化之PowerQuery篇(十一)使用Power BI进行动态帕累托分析

    https://zhuanlan.zhihu.com/p/57763423 上篇文章介绍了帕累托图的用处以及如何制作一个简单的帕累托图,在 PowerBI 中可以很方便的生成,但若仅止于此,并不足以体 ...

  9. Python并发编程04 /多线程、生产消费者模型、线程进程对比、线程的方法、线程join、守护线程、线程互斥锁

    Python并发编程04 /多线程.生产消费者模型.线程进程对比.线程的方法.线程join.守护线程.线程互斥锁 目录 Python并发编程04 /多线程.生产消费者模型.线程进程对比.线程的方法.线 ...

  10. 并发编程之关键字(synchronized、volatile)

    并发编程主要设计两个关键字:一个是synchronized,另一个是volatile.下面主要讲解这两个关键字,并对这两个关机进行比较. synchronized synchronized是通过JMV ...