Description

给出一个有向无环的连通图,起点为1,终点为N,每条边都有一个长度。小A从起点出发,走向终点。
到达每一个顶点时,如果有K条离开该点的道路,小A可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K 。
现在小A想知道,从起点走到终点的所经过的路径总长度期望是多少?

Input

第一行: 两个整数 N M,代表图中有N个点、M条边
第二行到第 1+M 行: 每行3个整数 a b c,代表从a到b有一条长度为c的有向边

Output

从起点到终点路径总长度的期望值,四舍五入保留两位小数。

Sample Input

4 4

1 2 1

1 3 2

2 3 3

3 4 4

Sample Output

7.00

Hint

对于30%的数据  N<=50

对于70%的数据  N<=1000

对于100%的数据  N<=100000,M<=2*N,边权<=1000

-----------------------------------

测试数据:https://files.cnblogs.com/files/Syameimaru/tour.zip

-------------------------------------------------------------------------------------------------------

题解:

对于这道题,我们很容易想到,用动态规划的思想解决有关期望的问题。

可以观察到,每个店的期望值,都只与他的子节点有关,具体关系为:

f[i]=(f[j]+w)/d[i]

其中,f[i[表示从i节点,到达终点的路径的期望。

注意,这里我们不用f[i]表示到达i点概率的期望值,因为如果这样表示,会导致状态转移代价过大,使算法不够优秀,并且有更多的细节(只考虑能够到大的父节点计算入度),不够优秀,所以我们才用倒序来推。

时间复杂度 O(n),我们可以按照拓扑序倒序来转移。

当然,我们没必要真的进行拓扑排序,记忆化dp就好

下面是胡搞的代码:

 #include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#define rep(i,a,b) for(register int i = (a);i<=(b);++i)
const int maxn = ;
struct Edge {
int v,dist;
Edge(int v,int dist):v(v),dist(dist){}
};
std::vector<Edge> edges;
std::vector<int> G1[maxn],G2[maxn];
std::queue<int> Q,Q2;
double f[maxn];
int n,m,a,b,v,inq[maxn],tp[maxn];
double dfs(int x) {
if(f[x]) return f[x];
if(x==n) return ;
for(register int i=;i<G1[x].size();i++) {
Edge e = edges[G1[x][i]];
f[x]+=dfs(e.v)+e.dist;
}
f[x]/=G1[x].size();
return f[x];
}
int main() {
freopen("tour.in","r",stdin);
freopen("tour.out","w",stdout);
scanf("%d%d",&n,&m);
rep(i,,m){
scanf("%d%d%d",&a,&b,&v);
inq[b]++;edges.push_back(Edge(b,v));
edges.push_back(Edge(a,v));
int num = edges.size();
G1[a].push_back(num-);
G2[b].push_back(num-);
}
dfs();
printf("%.2lf",f[]);
return ;
}

小A的旅行(绿豆蛙的归宿)【期望DP】的更多相关文章

  1. P4316 绿豆蛙的归宿 期望DP

    P4316 绿豆蛙的归宿 期望DP DAG上,每条边有边权,走向相连每条路的概率相等,问从起点到终点所经过的路径总长度期望 因为发现终点走到终点期望为0,定义\(f[i]\)从终点走到\(i\)所经过 ...

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

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

  3. 【bzoj3036】绿豆蛙的归宿 期望dp

    题目描述 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点.到达每一个顶点时,如 ...

  4. Luogu4316 | 绿豆蛙的归宿 (期望DP)

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

  5. Bzoj 3036: 绿豆蛙的归宿(期望)

    3036: 绿豆蛙的归宿 Time Limit: 2 Sec Memory Limit: 128 MB Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归 ...

  6. 洛谷P4316 绿豆蛙的归宿(期望)

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

  7. BZOJ 3036: 绿豆蛙的归宿 期望 + 拓扑排序

    随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿.给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点. 到达每一个顶点时,如果有K条离 ...

  8. 【BZOJ3036】绿豆蛙的归宿 概率DP

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  9. 洛谷P4316绿豆蛙的归宿——期望

    题目:https://www.luogu.org/problemnew/show/P4316 期望水题,从终点向起点推,因为是DAG,所以拓扑序推过去即可. 代码如下: #include<ios ...

  10. 洛谷$P4316$ 绿豆蛙的归宿 期望

    正解:期望 解题报告: 传送门! 看懂题目还是挺水的$(bushi$ 三个方法,但因为题目太水了懒得一一介绍了,,,反正都是期望,,,$so$随便港个最简单的趴$QwQ$ 直接考虑每条边的贡献,就会是 ...

随机推荐

  1. sql日期查询

    select getdate() ,getdate()) ,getdate()) ) ,getdate())) ,getdate())) Select datename(weekday, getdat ...

  2. fft 远程服务器返回错误 550返回码

    "远程服务器返回错误:(550) 文件不可用(例如,未找到文件,无法访问文件)"时,可能是如下原因: 1.URL路径不对,看看有没有多加空格,或者大小写问题 2.权限是否足 3.需 ...

  3. javascript数组操作(创建、元素删除、数组的拷贝)

    这篇文章主要介绍了javascript数组操作,包括创建.元素的访问.元素删除.数组的拷贝等操作,还有其它示例,需要的朋友可以参考下 1.数组的创建 复制代码 代码如下: var arrayObj = ...

  4. 什么是2MSL

    [什么是2MSL] MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃.因为tcp报文( ...

  5. Struts2拦截器概述

    --------------------siwuxie095 Struts2 拦截器概述 1.Struts2 框架封装的很多功能都在 Struts2 的拦截器中 2.Struts2 框架中有很多拦截器 ...

  6. advance shading--光源的类型

    我们这里讨论的光源类型都有一个相同点,就是,我们考量的都是光源上的一个点,对于物体表面上一个点的影响,也就是说立体角趋近为零的情况. 这里光源分为两类,一类是方向光,假设光源在无限远处.另一类是点光源 ...

  7. mutex 实现 只允许一个进程

    static class Program { [STAThread] static void Main() { bool createdNew=false; Mutex mutex = new Mut ...

  8. SpringMVC源码解析- HandlerAdapter - ModelFactory

    ModelFactory主要是两个职责: 1. 初始化model 2. 处理器执行后将modle中相应参数设置到SessionAttributes中 我们来看看具体的处理逻辑(直接充当分析目录): 1 ...

  9. 用Swift实现一款天气预报APP(三)

    这个系列的目录: 用Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) 通过前面的学习,一个天气预报的APP已经基本可用了.至少 ...

  10. Ubuntu 16.04调节屏幕显示字体大小

    对于高分辨屏幕来说,Ubuntu的字体可能会有点小,反之,低分率的屏幕字体有点大,设置方法如下: [System Settings]->[Displays]->[ Scale for me ...