题干:

随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿。

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

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

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

解题报告:

根据期望的线性性,可以转化成每条边被走过的次数的和。也就是:每条边的概率乘以该边的边权,求和就是答案。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
int head[MAX],n,m,tot,in[MAX],out[MAX];
double p[MAX],ans;
struct Edge {int u,v,w;int ne;
} e[MAX];
void add(int u,int v,int w) {e[++tot].u = u;e[tot].v = v;e[tot].w = w;e[tot].ne = head[u];head[u] = tot;
}
int main()
{tot=0;memset(head,-1,sizeof head);cin>>n>>m;for(int a,b,c,i = 1; i<=m; i++) scanf("%d%d%d",&a,&b,&c),add(a,b,c),out[a]++,in[b]++; queue<int> q;q.push(1);p[1]=1;while(q.size()) {int cur = q.front();q.pop();for(int i = head[cur]; ~i; i = e[i].ne) {int v = e[i].v,u = e[i].u;in[v]--;if(!in[v]) q.push(v);p[v] += p[u]/out[u];ans += (p[u]/out[u]) * e[i].w;}}printf("%.2f\n",ans);return 0 ;
}

总结:

当然这题也可以像【POJ - 2096】Collecting Bugs(概率dp)这题一样用dp[i]代表从i这个点开始走到n号节点的平均边数,然后dp[n]=0,dp[1]就是答案。

但是这题没必要,因为那道题是:转化成DAG图之后,你知道每条边转化的概率,所以可以直接dp,但是这题你刚开始并不知道每条边被走过的概率是多少,比如这个图就不知道这一点没所以没法用这个信息。

所以这题如果非要用这种方法解题,那首先先预处理出来每条边的概率

,然后就可以用那种dp的方式求解了。

【BZOJ - 3036】绿豆蛙的归宿(概率DAG图dp,拓扑排序,概率dp,期望的线性性)相关推荐

  1. bzoj 3036: 绿豆蛙的归宿(Dp)

    3036: 绿豆蛙的归宿 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 724  Solved: 511 [Submit][Status][Discu ...

  2. BZOJ 3036 绿豆蛙的归宿

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

  3. BZOJ 3036 绿豆蛙的归宿 期望DP

    Time Limit: 2 Sec Memory Limit: 128 MB Submit: 610 Solved: 431 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它 ...

  4. bzoj 3036: 绿豆蛙的归宿

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

  5. 【BZOJ 3036】 3036: 绿豆蛙的归宿 (概率DP)

    3036: 绿豆蛙的归宿 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 491  Solved: 354 Description 随着新版百度空间的下 ...

  6. 【BZOJ】3036: 绿豆蛙的归宿

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

  7. 3036: 绿豆蛙的归宿

    题目链接 题目大意:带权DAG,从1走到n,若到达点x后有k条出边,走这k条边的概率均为1/k,求1-n期望路径长度 题解:f[i]表示i−n的期望路径长度f[i]表示i-n的期望路径长度 f[i]= ...

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

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

  9. 概率与期望——P4316 绿豆蛙的归宿

    概率与期望--P4316 绿豆蛙的归宿 题目 算法分析 Code 反思与总结 题目 P4316 绿豆蛙的归宿 算法分析 要计算路径的总长度期望,可以将每一个结点看作一个阶段,用dpdpdp来实现.(看 ...

最新文章

  1. OpenCV3.2.0+VS2017在window10开发环境配置记录
  2. 数据库表(字段类型、约束、截断表、修改表字段、重命名表)
  3. 鱼油账号记录程序 - 零基础入门学习Delphi38
  4. php 分布式环境 启动,极简.高性能.分布式框架,可运行于多种环境(apache/php-fpm,swoole)...
  5. react native使用百度echarts显示图表
  6. 最大尺寸分辨率_未来就在眼前——视涯科技推出最高分辨率硅基OLED显示屏幕...
  7. LOOPS HDU - 3853(概率dp,期望)
  8. VS2005中,access对只读目录的属性判断不准确
  9. Ubuntu作为服务器其tomcat被远程访问问题
  10. SGPN: Similarity Group Proposal Network for 3D Point Cloud Instance Segmentation
  11. 全志JAVA_android 全志a10(2.3.4)开发1(编译环境搭建)
  12. 网站安全之为Web项目添加验证码功能(一)
  13. set列表对象去重_set去重应用
  14. Oracle树形结构拖拽之插队重新排序
  15. 使用apicloud开发app
  16. 基于 H5 Canvas “指纹识别“ 技术 【浏览器指纹 VS Canvas指纹】
  17. 超参数优化:网格搜索法
  18. 【Windows】win10多桌面与多任务
  19. python字符映射表和字符替换
  20. C语言转义字符及注意点

热门文章

  1. ConfigurationManager.AppSettings[] ConfigurationManager智能显示不出来
  2. 解决input设置背景后,在ie7下浏览内容过长背景跟着滚动
  3. Java程序员的推荐阅读书籍
  4. 电子报账系统源码_网上商城系统建设心得,轻松搞定选择困难
  5. 推荐系统——Wide Deep
  6. 江阳职高计算机应用教改实验,计算机应用课程教改模式
  7. ansible获取linux信息,ansible 获取系统信息的一些范例,ansible系统信息
  8. python查找公共前缀_Python实现查找字符串数组最长公共前缀示例
  9. asterisk 支持 VP8 video编码 实现安卓的视频通话
  10. nginx源码学习资源