【BZOJ - 3036】绿豆蛙的归宿(概率DAG图dp,拓扑排序,概率dp,期望的线性性)
题干:
随着新版百度空间的下线,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,期望的线性性)相关推荐
- bzoj 3036: 绿豆蛙的归宿(Dp)
3036: 绿豆蛙的归宿 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 724 Solved: 511 [Submit][Status][Discu ...
- BZOJ 3036 绿豆蛙的归宿
Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点. 到达 ...
- BZOJ 3036 绿豆蛙的归宿 期望DP
Time Limit: 2 Sec Memory Limit: 128 MB Submit: 610 Solved: 431 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它 ...
- bzoj 3036: 绿豆蛙的归宿
Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点. 到达 ...
- 【BZOJ 3036】 3036: 绿豆蛙的归宿 (概率DP)
3036: 绿豆蛙的归宿 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 491 Solved: 354 Description 随着新版百度空间的下 ...
- 【BZOJ】3036: 绿豆蛙的归宿
Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点. 到达 ...
- 3036: 绿豆蛙的归宿
题目链接 题目大意:带权DAG,从1走到n,若到达点x后有k条出边,走这k条边的概率均为1/k,求1-n期望路径长度 题解:f[i]表示i−n的期望路径长度f[i]表示i-n的期望路径长度 f[i]= ...
- 【BZOJ3036】绿豆蛙的归宿 拓补排序+概率
[BZOJ3036]绿豆蛙的归宿 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度. ...
- 概率与期望——P4316 绿豆蛙的归宿
概率与期望--P4316 绿豆蛙的归宿 题目 算法分析 Code 反思与总结 题目 P4316 绿豆蛙的归宿 算法分析 要计算路径的总长度期望,可以将每一个结点看作一个阶段,用dpdpdp来实现.(看 ...
最新文章
- OpenCV3.2.0+VS2017在window10开发环境配置记录
- 数据库表(字段类型、约束、截断表、修改表字段、重命名表)
- 鱼油账号记录程序 - 零基础入门学习Delphi38
- php 分布式环境 启动,极简.高性能.分布式框架,可运行于多种环境(apache/php-fpm,swoole)...
- react native使用百度echarts显示图表
- 最大尺寸分辨率_未来就在眼前——视涯科技推出最高分辨率硅基OLED显示屏幕...
- LOOPS HDU - 3853(概率dp,期望)
- VS2005中,access对只读目录的属性判断不准确
- Ubuntu作为服务器其tomcat被远程访问问题
- SGPN: Similarity Group Proposal Network for 3D Point Cloud Instance Segmentation
- 全志JAVA_android 全志a10(2.3.4)开发1(编译环境搭建)
- 网站安全之为Web项目添加验证码功能(一)
- set列表对象去重_set去重应用
- Oracle树形结构拖拽之插队重新排序
- 使用apicloud开发app
- 基于 H5 Canvas “指纹识别“ 技术 【浏览器指纹 VS Canvas指纹】
- 超参数优化:网格搜索法
- 【Windows】win10多桌面与多任务
- python字符映射表和字符替换
- C语言转义字符及注意点
热门文章
- ConfigurationManager.AppSettings[] ConfigurationManager智能显示不出来
- 解决input设置背景后,在ie7下浏览内容过长背景跟着滚动
- Java程序员的推荐阅读书籍
- 电子报账系统源码_网上商城系统建设心得,轻松搞定选择困难
- 推荐系统——Wide Deep
- 江阳职高计算机应用教改实验,计算机应用课程教改模式
- ansible获取linux信息,ansible 获取系统信息的一些范例,ansible系统信息
- python查找公共前缀_Python实现查找字符串数组最长公共前缀示例
- asterisk 支持 VP8 video编码 实现安卓的视频通话
- nginx源码学习资源