[Luogu 4316] 绿豆蛙的归宿
一道基础的 \(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] 绿豆蛙的归宿的更多相关文章
- Luogu P4316 绿豆蛙的归宿
P4316 绿豆蛙的归宿 题意翻译 「Poetize3」 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边 ...
- [luogu]P4316 绿豆蛙的归宿(拓扑排序,期望)
P4316 绿豆蛙的归宿 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够 ...
- 洛谷4316 绿豆蛙的归宿(DAG递推/概率dp)
题目大意: 给定一个DAG,求起点到终点的路径长度期望 根据题意可以知道每一条边都有一定概率被走到 那么\(\displaystyle\begin{aligned} Ans = \sum_{e \in ...
- 【BZOJ3036】绿豆蛙的归宿 拓补排序+概率
[BZOJ3036]绿豆蛙的归宿 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度. ...
- BZOJ3036: 绿豆蛙的归宿&Wikioi2488:绿豆蛙的归宿
3036: 绿豆蛙的归宿 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 108 Solved: 73[Submit][Status] Descript ...
- BZOJ 3036: 绿豆蛙的归宿( 期望dp )
从终点往起点倒推 . 在一个图 考虑点 u , 出度为 s : s = 0 , d[ u ] = 0 ; s ≠ 0 , 则 d( u ) = ( ∑ d( v ) ) / s ( ( u , v ) ...
- BZOJ3036绿豆蛙的归宿
BZOJ3036绿豆蛙的归宿 锲下陟凝 褰宓万 郝瓦痕膳 叶诙摞 А知π剧 椐猊∫距 屠缲佗 ゲ蕖揪 俜欧彖鹤 磲砩ほ #琛扶 觅电闸ス 捆鳢げ 浜窠 魂睨"烁 蕞滗浼 洒ヂ跪 ...
- [COGS 1065] 绿豆蛙的归宿
先贴题面w 1065. [Nescafe19] 绿豆蛙的归宿 ★ 输入文件:ldfrog.in 输出文件:ldfrog.out 简单对比时间限制:1 s 内存限制:128 MB 随着新 ...
- P4316 绿豆蛙的归宿(期望)
P4316 绿豆蛙的归宿 因为非要用bfs所以稍微麻烦一点qwq(大家用的都是dfs) 其实问题让我们求的就是经过每条边的概率*边权之和 我们可以用bfs把图遍历一遍处理概率,顺便把每条边的概率*边权 ...
随机推荐
- java基础(四):谈谈java中的IO流
1.字节流 1.1.字节输出流output 1.1.1.数据写入文件中 通过api查找output.找到很多,其中java.io.OutputStream,OutputStream: 输出字节流的超类 ...
- openlayers 3方法继承
之前Web GIS开发使用的ArcGIS API用起来很系统,但是使用开源Web GIS API已经成主流趋势(你懂的~),最近项目想要从ArcGIS API 转到openlayers API,用起来 ...
- Python 标准类库 - 因特网协议与支持之socketserver
标准类库 - 因特网协议与支持之socketserver by:授客 QQ:1033553122 socketserver 模块,简化网络服务编写任务. 创建服务的步骤 1 通过子类化BaseReq ...
- Eclipse导出包含第三方Jar的工程
基于第三方开源的Jar包封装了一个工具类,在导出成Jar包后,引用新生成的Jar包,却报找不到类的错误.看了一下生成的Jar包,发现根本没有包含第三方Jar包的相关class.这是导出第三方Jar包时 ...
- Ionic3关闭弹出页面,跳转到列表后刷新父页面
记得上次写过一篇如何弹出页面的文章,好像是2月28号ionic3 Modal组件那一篇,这篇也算那一篇的续集吧!这篇是弹出的页面关闭后刷新父页面的干活!上代码! 弹出页面:(关闭的时候可以传入值,再父 ...
- Centos7 二进制安装 Kubernetes 1.13
目录 1.目录 1.1.什么是 Kubernetes? 1.2.Kubernetes 有哪些优势? 2.环境准备 2.1.网络配置 2.2.更改 HOSTNAME 2.3.配置ssh免密码登录登录 2 ...
- Redis入门教程(一)
一.NoSQL概述 1.什么是NoSQL NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯 ...
- 「插件」Runner更新Pro版,帮助设计师远离996
三年多前Runner团队在德国汉堡的骇客松上第一次发布了Sketch插件Runner的beta版本.从那以后,这个团队的目标一直很清晰: 创造一个加速设计工作流的工具. 他们只给Runner添加真正能 ...
- 服务消费者Feign和Ribbon的区别
1.Ribbon通过注解@EnableEurekaClient/@EnableDiscoveryClient向服务中心注册: PS:选用的注册中心是eureka,那么就推荐@EnableEure ...
- js深浅拷贝
作为一枚前段,我们知道对象类型在赋值的过程中其实是复制了地址,从而会导致改变了一方其他也都被改变的情况.通常在开发中我们不希望出现这样的问题,我们可以使用浅拷贝来解决这个情况. 浅拷贝 首先可以通过O ...