【BZOJ 3036】 3036: 绿豆蛙的归宿 (概率DP)
3036: 绿豆蛙的归宿
Time Limit: 2 Sec Memory Limit: 128 MB
Submit: 491 Solved: 354Description
随着新版百度空间的下线,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 4Sample Output
7.00HINT
对于100%的数据 N<=100000,M<=2*N
Source
【分析】
这题题意绝对有问题!
3 2
1 2 1
1 3 5
比如这个sample我输出5的代码是错的,AC代码输出3。。。。
不是说起点到终点的路径的期望长度吗?那应该起点到终点的路径才算啊?
唉。。。不懂。。。。我这种理解的代码的话呢,算一下起点到终点的概率,最后除一下这个概率,不能到终点的期望长度视为0.
代码是这样的:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 100010
#define Maxm 200010 struct node
{
int x,y,c,next;
}t[Maxm],tt[Maxm];
int len,first[Maxn],d[Maxn]; void ins(int x,int y,int c)
{
d[x]++;
t[++len].x=x;t[len].y=y;t[len].c=c;
t[len].next=first[x];first[x]=len;
}
int ln,ft[Maxn];
void INS(int x,int y){tt[++ln].x=x;tt[ln].y=y;tt[ln].next=ft[x];ft[x]=ln;} bool vis[Maxn];
double f[Maxn],g[Maxn]; void dfs(int x)
{
if(vis[x]) return;vis[x]=;
for(int i=ft[x];i;i=tt[i].next)
{
int y=tt[i].y;
dfs(y);
g[x]+=g[y]*1.0/d[y];
}
} int n,m;
double ffind(int x)
{
if(x==n) return f[x]=;
if(vis[x]) return f[x];vis[x]=;
for(int i=first[x];i;i=t[i].next)
{
int y=t[i].y;
ffind(y);
if(f[y]==&&y!=n) continue;
f[x]+=(f[y]+t[i].c)*1.0/d[x];
}
} int main()
{
scanf("%d%d",&n,&m);
len=;ln=;
memset(first,,sizeof(first));
memset(ft,,sizeof(ft));
memset(d,,sizeof(d));
for(int i=;i<=m;i++)
{
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
ins(x,y,c);INS(y,x);
}
g[]=;
memset(vis,,sizeof(vis));vis[]=;
dfs(n);
memset(vis,,sizeof(vis));
ffind();
printf("%.2lf\n",f[]/g[n]);
return ;
}
什么都没管的AC代码是这样的:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 100010
#define Maxm 200010 struct node
{
int x,y,c,next;
}t[Maxm],tt[Maxm];
int len,first[Maxn],d[Maxn]; void ins(int x,int y,int c)
{
d[x]++;
t[++len].x=x;t[len].y=y;t[len].c=c;
t[len].next=first[x];first[x]=len;
} bool vis[Maxn];
double f[Maxn]; int n,m;
double ffind(int x)
{
if(vis[x]) return f[x];vis[x]=;
for(int i=first[x];i;i=t[i].next)
{
int y=t[i].y;
ffind(y);
f[x]+=(f[y]+t[i].c)*1.0/d[x];
}
} int main()
{
scanf("%d%d",&n,&m);
len=;
memset(first,,sizeof(first));
for(int i=;i<=m;i++)
{
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
ins(x,y,c);
}
memset(vis,,sizeof(vis));
ffind();
printf("%.2lf\n",f[]);
return ;
}
【醉了。。。
2017-04-22 11:00:01
【BZOJ 3036】 3036: 绿豆蛙的归宿 (概率DP)的更多相关文章
- 【BZOJ3036】绿豆蛙的归宿 概率DP
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- P4316 绿豆蛙的归宿 期望DP
P4316 绿豆蛙的归宿 期望DP DAG上,每条边有边权,走向相连每条路的概率相等,问从起点到终点所经过的路径总长度期望 因为发现终点走到终点期望为0,定义\(f[i]\)从终点走到\(i\)所经过 ...
- BZOJ 3036: 绿豆蛙的归宿( 期望dp )
从终点往起点倒推 . 在一个图 考虑点 u , 出度为 s : s = 0 , d[ u ] = 0 ; s ≠ 0 , 则 d( u ) = ( ∑ d( v ) ) / s ( ( u , v ) ...
- 【BZOJ3036】绿豆蛙的归宿 概率与期望
最水的概率期望,推荐算法合集之<浅析竞赛中一类数学期望问题的解决方法> #include <iostream> #include <cstdio> using na ...
- 【bzoj3036】绿豆蛙的归宿 期望dp
题目描述 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度.绿豆蛙从起点出发,走向终点.到达每一个顶点时,如 ...
- Luogu4316 | 绿豆蛙的归宿 (期望DP)
题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都 ...
- 【BZOJ 3036】 绿豆蛙的归宿
求期望的题目(~~~water~~~) 压了下代码,压成15行hhh: 我把代码压成这么丑估计也没有人看吧: 毕竟是zky讲的一个水题,就当给博客除草了: dfs回溯时求当前节点的f,除以当前节 ...
- Bzoj 3036: 绿豆蛙的归宿(期望)
3036: 绿豆蛙的归宿 Time Limit: 2 Sec Memory Limit: 128 MB Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归 ...
- 【BZOJ3036】绿豆蛙的归宿 拓补排序+概率
[BZOJ3036]绿豆蛙的归宿 Description 随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度. ...
随机推荐
- cassandra数据库
一.下载地址:http://www.apache.org/dyn/closer.lua/cassandra/3.0.11/apache-cassandra-3.0.11-bin.tar.gz 二.安装 ...
- Linux基础-vim编辑器
使用vi编辑器编辑文件/1.txt进入编辑模式写入内容“hello world” 命令行模式输入i,进入编辑模式 写入HelloWorld,按ESC进入命令行模式,输入:进入扩展模式输入wq保存退出 ...
- jq 监听input值的变化
$(".popWeiXing .name").bind("input propertychange", function() { modValue.diyDat ...
- SolrJ API 官方文档最佳实践
以下内容译自Solr Wiki官方文档,版权没有,随意转载. Solrj 是一个访问solr的Java客户端.它提供了一个java接口用于添加更新和查询solr索引.本页面介绍SolrJ最新版本1.4 ...
- 87.在ModelSim中添加Xilinx ISE仿真库
在ModelSim中添加Xilinx ISE仿真库 说明: l ModelSim一定要安装在不带空格的目录下,即不要安装在“Program Files”目录下.如作者是安装在D:\softwares\ ...
- device tree --- #address-cells and #size-cells property【转】
转自:http://www.cnblogs.com/youchihwang/p/7050846.html device tree source Example1 / { #address-cells ...
- 使用nginx sticky实现基于cookie的负载均衡【转】
在多台后台服务器的环境下,我们为了确保一个客户只和一台服务器通信,我们势必使用长连接.使用什么方式来实现这种连接呢,常见的有使用nginx自带的ip_hash来做,我想这绝对不是一个好的办法,如果前端 ...
- python基础--re模块
常用正则表达式符号 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r& ...
- C++模板(Templates)
模板(template)是泛型编程的基础,"泛型"的含义就是没有不依赖具体的数据类型.模板的引入是为了创建一般性的类(模板类)或者函数(模板函数).典型的容器比如迭代器/算法等是泛 ...
- 使用Dockerfile构建docker lnmp环境
一.mysql 1.创建 Dockerfile mkdir mysql # 创建一个目录存放之后的Dockerfile,目录名无所谓 cd mysql # 进入目录 vi Dockerfile # 创 ...