3036: 绿豆蛙的归宿

Time Limit: 2 Sec  Memory Limit: 128 MB
Submit: 491  Solved: 354

Description

随着新版百度空间的下线,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

Source

Poetize3

【分析】

  这题题意绝对有问题!

3 2
1 2 1
1 3 5

  比如这个sample我输出5的代码是错的,AC代码输出3。。。。

  不是说起点到终点的路径的期望长度吗?那应该起点到终点的路径才算啊?

  唉。。。不懂。。。。我这种理解的代码的话呢,算一下起点到终点的概率,最后除一下这个概率,不能到终点的期望长度视为0.

  代码是这样的:

  

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 #define Maxn 100010
 8 #define Maxm 200010
 9
10 struct node
11 {
12     int x,y,c,next;
13 }t[Maxm],tt[Maxm];
14 int len,first[Maxn],d[Maxn];
15
16 void ins(int x,int y,int c)
17 {
18     d[x]++;
19     t[++len].x=x;t[len].y=y;t[len].c=c;
20     t[len].next=first[x];first[x]=len;
21 }
22 int ln,ft[Maxn];
23 void INS(int x,int y){tt[++ln].x=x;tt[ln].y=y;tt[ln].next=ft[x];ft[x]=ln;}
24
25 bool vis[Maxn];
26 double f[Maxn],g[Maxn];
27
28 void dfs(int x)
29 {
30     if(vis[x]) return;vis[x]=1;
31     for(int i=ft[x];i;i=tt[i].next)
32     {
33         int y=tt[i].y;
34         dfs(y);
35         g[x]+=g[y]*1.0/d[y];
36     }
37 }
38
39 int n,m;
40 double ffind(int x)
41 {
42     if(x==n) return f[x]=0;
43     if(vis[x]) return f[x];vis[x]=1;
44     for(int i=first[x];i;i=t[i].next)
45     {
46         int y=t[i].y;
47         ffind(y);
48         if(f[y]==0&&y!=n) continue;
49         f[x]+=(f[y]+t[i].c)*1.0/d[x];
50     }
51 }
52
53 int main()
54 {
55     scanf("%d%d",&n,&m);
56     len=0;ln=0;
57     memset(first,0,sizeof(first));
58     memset(ft,0,sizeof(ft));
59     memset(d,0,sizeof(d));
60     for(int i=1;i<=m;i++)
61     {
62         int x,y,c;
63         scanf("%d%d%d",&x,&y,&c);
64         ins(x,y,c);INS(y,x);
65     }
66     g[1]=1;
67     memset(vis,0,sizeof(vis));vis[1]=1;
68     dfs(n);
69     memset(vis,0,sizeof(vis));
70     ffind(1);
71     printf("%.2lf\n",f[1]/g[n]);
72     return 0;
73 }

View Code

  什么都没管的AC代码是这样的:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 #define Maxn 100010
 8 #define Maxm 200010
 9
10 struct node
11 {
12     int x,y,c,next;
13 }t[Maxm],tt[Maxm];
14 int len,first[Maxn],d[Maxn];
15
16 void ins(int x,int y,int c)
17 {
18     d[x]++;
19     t[++len].x=x;t[len].y=y;t[len].c=c;
20     t[len].next=first[x];first[x]=len;
21 }
22
23 bool vis[Maxn];
24 double f[Maxn];
25
26 int n,m;
27 double ffind(int x)
28 {
29     if(vis[x]) return f[x];vis[x]=1;
30     for(int i=first[x];i;i=t[i].next)
31     {
32         int y=t[i].y;
33         ffind(y);
34         f[x]+=(f[y]+t[i].c)*1.0/d[x];
35     }
36 }
37
38 int main()
39 {
40     scanf("%d%d",&n,&m);
41     len=0;
42     memset(first,0,sizeof(first));
43     for(int i=1;i<=m;i++)
44     {
45         int x,y,c;
46         scanf("%d%d%d",&x,&y,&c);
47         ins(x,y,c);
48     }
49     memset(vis,0,sizeof(vis));
50     ffind(1);
51     printf("%.2lf\n",f[1]);
52     return 0;
53 }

View Code

【醉了。。。

2017-04-22 11:00:01

转载于:https://www.cnblogs.com/Konjakmoyu/p/6747180.html

【BZOJ 3036】 3036: 绿豆蛙的归宿 (概率DP)相关推荐

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

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

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

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

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

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

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

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

  5. P4316 绿豆蛙的归宿 期望dp + DAG

    传送门 文章目录 题意: 思路: 题意: 思路: 首先要发现这是一个DAGDAGDAG图,让后我们可以用拓扑在图上跑期望dpdpdp. 定义f[i]f[i]f[i]表示iii到nnn的期望路径长度,知 ...

  6. AcWing 217. 绿豆蛙的归宿(期望dp)

    设F[x]为从x到终点经过的路径长度的期望值, 若从x出发到达y1, y2, y3,..., yk, 边长分别是z1, z2, z3, ..., zk, 根据数学期望的定义得出: 由于从终点的状态开始 ...

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

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

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

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

  9. Acwing 217. 绿豆蛙的归宿

    Acwing 217. 绿豆蛙的归宿 题意: 给出一个有向无环的连通图,起点为 1,终点为 N,每条边都有一个长度. 数据保证从起点出发能够到达图中所有的点,图中所有的点也都能够到达终点. 绿豆蛙从起 ...

最新文章

  1. 启动项目的时候,一直打印日志
  2. esp8266烧写机智云固件方法
  3. poj 2069 Super Star 最小求覆盖【爬山算法】
  4. ElementUI的DateTimePicker组件添加验证规则以及限制选择范围
  5. [云炬创业管理笔记]第九章为创业成败而准备测试2
  6. 美丽新世界:当代日本视觉文化展
  7. 这本免费小书,带你征服 GitHub!
  8. 17秋 软件工程 团队第五次作业 Alpha Scrum2
  9. 技术就是力量?!有人拿走百万现金,真相却是......
  10. Android应用被强制停止后无法接受广播解决方案
  11. 利用Java-JACOB操作WORD文档2
  12. 面试题31:连续子数组的最大和
  13. Android 高德地图上自定义动画
  14. RMS (Rights Management Services)基于SDK2.1的二次开发环境搭建
  15. 第一节 细胞是生命活动的基本单位
  16. 研究生毕业2w的工作是什么样的?
  17. 基于Quartz.net 的任务调度平台Weiz.TaskManager
  18. 产品经理到底是做什么的?|️ 什么是产品经理?
  19. ZG前端学习系统day11 2020-11-16
  20. 洪恩教育2021年第一季度总收入为2.267亿元人民币

热门文章

  1. python局域网传输文件_Python+pyftpdlib实现局域网文件互传
  2. srm linux字符界面,如何使用srm安全的删除Linux中的文件
  3. java读书心得_Java读书笔记 20100815
  4. 爱立信总裁表示欧洲网络始终趋于落后,网站推广之下5G发展需加快步伐
  5. 网络营销外包——网络营销外包公司表示网站更新仅仅是原创还不够
  6. 网站与网址现在还有人没搞清二者之间的区别吗?
  7. android 4.2 桌面快捷方式,Android 添加桌面快捷方式操做
  8. 机器人 知乎碧桂园_从房地产大亨到跨界造“机器人”,碧桂园葫芦里卖着什么药?...
  9. cass道路道路设计参数文件命令为什么没反应_为什么MySQL不建议使用delete删除数据?...
  10. (转载)TL-WN725N V3无线网卡驱动移植与wireless工具wpa_supplicant-2.6