题目链接

一道基础的 \(DAG\) 上期望 \(DP\)。

给出一个有向无环图,起点为 \(1\) 终点为 \(N\),每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点。到达每一个顶点时,如果有 \(K\) 条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 \(\frac{1}{K}\) 。求从起点走到终点的所经过的路径总长度期望是多少。

一开始使经过起点的概率为 \(1\),到起点的期望距离为 \(0\),拓扑推下去,\(GG\)。\(WA\) 了两发,怎么也搞不出来……

其实这道题的期望怎么算是很显然的,可以发现,\(Ans = \sum_{e \in Edge} t_e w_e\),\(t_e\) 为经过一条边的期望次数,即经过这条边起点的期望次数除以这条边起点的出度。

然后可以设状态 \(ex[x]\) 表示点 \(x\) 到终点 \(n\) 的期望路径总长。显然,要求的答案为\(ex[1]\),而且有\(ex[n]=0\)。进行一遍拓扑排序,在拓扑排序的时候进行期望 \(dp\) 的转移。而对于一条有向边,我们假设它由 \(x−>y\),那么有 \(ex[x]=(\frac{1}{degree[x]})∗\sum (ex[y] + w[x−>y])\)。题目就解出来了……

总结一下的话……期望 \(DP\) 也是一种 \(DP\),所以 \(DP\) 的相关内容都是有的。一般来说,初始状态确定时可用顺推,终止状态确定时可用逆推,而期望大多是逆推的。

代码:

#include <cmath>
#include <queue>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = 100000 + 10;
double ex[maxn];
int n, m, head[maxn], in_deg[maxn], out_deg[maxn], sta[maxn], top, edge_num; struct Edge { int v, w, nxt; } edge[maxn << 1]; inline void Add_edge(int u, int v, int w) {
edge[++edge_num].v = v, edge[edge_num].w = w, ++out_deg[u], ++in_deg[v];
edge[edge_num].nxt = head[u], head[u] = edge_num;
} inline void Breath_fs(int s) {
queue<int> q; q.push(s);
while( !q.empty() ) {
sta[++top] = q.front(), q.pop();
for(int i = head[sta[top]]; i; i = edge[i].nxt)
if( --in_deg[edge[i].v] == 0 ) q.push(edge[i].v);
}
} int main(int argc, char const *argv[])
{
scanf("%d%d", &n, &m);
for(int u, v, w, i = 1; i <= m; ++i)
scanf("%d%d%d", &u, &v, &w), Add_edge(u, v, w);
Breath_fs(1);
for(int t = n; t > 0; --t)
for(int x = sta[t], i = head[x]; i; i = edge[i].nxt)
ex[x] = ex[x] + (ex[edge[i].v] + edge[i].w) / out_deg[x];
printf("%.2lf\n", ex[1]); return 0;
}

 

                             花影婆娑欲踏踩,悬崖樱树月色明。

[Luogu 4316] 绿豆蛙的归宿的更多相关文章

  1. Luogu P4316 绿豆蛙的归宿

    P4316 绿豆蛙的归宿 题意翻译 「Poetize3」 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边 ...

  2. [luogu]P4316 绿豆蛙的归宿(拓扑排序,期望)

    P4316 绿豆蛙的归宿 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够 ...

  3. 洛谷4316 绿豆蛙的归宿(DAG递推/概率dp)

    题目大意: 给定一个DAG,求起点到终点的路径长度期望 根据题意可以知道每一条边都有一定概率被走到 那么\(\displaystyle\begin{aligned} Ans = \sum_{e \in ...

  4. 【BZOJ3036】绿豆蛙的归宿 拓补排序+概率

    [BZOJ3036]绿豆蛙的归宿 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度. ...

  5. BZOJ3036: 绿豆蛙的归宿&Wikioi2488:绿豆蛙的归宿

    3036: 绿豆蛙的归宿 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 108  Solved: 73[Submit][Status] Descript ...

  6. BZOJ 3036: 绿豆蛙的归宿( 期望dp )

    从终点往起点倒推 . 在一个图 考虑点 u , 出度为 s : s = 0 , d[ u ] = 0 ; s ≠ 0 , 则 d( u ) = ( ∑ d( v ) ) / s ( ( u , v ) ...

  7. BZOJ3036绿豆蛙的归宿

    BZOJ3036绿豆蛙的归宿 锲下陟凝 褰宓万 郝瓦痕膳 叶诙摞 А知π剧 椐猊∫距 屠缲佗 ゲ蕖揪 俜欧彖鹤 磲砩ほ #琛扶 觅电闸ス 捆鳢げ 浜窠 魂睨"烁 蕞滗浼 洒ヂ跪 ...

  8. [COGS 1065] 绿豆蛙的归宿

    先贴题面w 1065. [Nescafe19] 绿豆蛙的归宿 ★   输入文件:ldfrog.in   输出文件:ldfrog.out   简单对比时间限制:1 s   内存限制:128 MB 随着新 ...

  9. P4316 绿豆蛙的归宿(期望)

    P4316 绿豆蛙的归宿 因为非要用bfs所以稍微麻烦一点qwq(大家用的都是dfs) 其实问题让我们求的就是经过每条边的概率*边权之和 我们可以用bfs把图遍历一遍处理概率,顺便把每条边的概率*边权 ...

随机推荐

  1. Android RecyclerView初探

    今天研究了一下RecyclerView,RecyclerView比ListView的效率更高而且可以横向滑动,所以现在许多Android项目更倾向与使用RecyclerView. 下面是一个Recyc ...

  2. iOS----------Xcode 无线调试

    环境要求: 至少Mac OSX 10.12.6 iOS 11 Xcode 9 1. ”自己的工程“ -> windows -> Device and Simulators ,打开设备和模拟 ...

  3. error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]

    今天在开发过程中遇到了C1189 error.找了好久解决办法,最后自己解决了...... 方法:工程右键->属性 编辑预处理器定义: 再次运行,就解决了.

  4. 应用shell脚本停启Tomcat

    最近在工作中频繁的操作多个tomcat,顺便就简单研究了一下 一. 简介 Shell 是一种与操作系统直接交互的程序,Unix系统中叫Bourne Shell,包括以下几种 Sh—Bourne She ...

  5. 分布式系统CAP理论

    在单机的数据库系统之中,我们很容易实现一套满足ACID 特性的 事务处理系统, 事务的一致性不存在问题. 但是在分布式系统之中,由于数据分布在不同的主机结点上,如何对着些数据进行分布式的事务处理就具有 ...

  6. C# 得到EXCEL表格中的有效行数和列数 中 CurrentRegion 的有效范围

  7. windows压缩图片

  8. mysql8.0绿色版安装及mysqldump备份

    1.下载mysql绿色版压缩包https://dev.mysql.com/downloads/mysql/ 2.解压到安装目录后,在根目录创建data文件夹 3.把mysql下的bin目录添加到环境变 ...

  9. vcenter 忘记 administrator@vsphere.local 密码怎么办

    现有一个windows版本的vcenter5.5管理员密码丢失,我们可以使用vmware的工具vdcadmintool,在命令行进入到vdcadmintool所在的目录,然后执行下vdcadminto ...

  10. Codeception 实战

    Codeception 测试 Php 代码 一.一句话概述 使用 cc 进行单元测试,保证现有代码质量,为以后维护与重构提供支撑. 二.目标 安装配置 cc 编写测试代码,简化开发与最大化稳定性和可维 ...