随着新版百度空间的下线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿。
给出一个有向无环的连通图,起点为1终点为N,每条边都有一个长度。绿豆蛙从起点出发,走向终点。
到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K 。
现在绿豆蛙想知道,从起点走到终点的所经过的路径总长度期望是多少?
题解:
设 $f_{i}$ 表示 $i$ 号节点走向终点还需期望的步数. 
记忆化搜索一下即可. 

Code:

#include <bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 200003
using namespace std;
queue <int> Q;
int n, m, edges;
int hd[maxn], to[maxn], nex[maxn], deg[maxn], done[maxn];
double val[maxn], f[maxn], k[maxn];
void add(int u, int v, double c)
{
nex[++edges] = hd[u], hd[u] = edges, to[edges] = v, val[edges] = c;
}
int main()
{
// setIO("input");
scanf("%d%d",&n,&m);
for(int i = 1; i <= m; ++i)
{
int a, b;
double c;
scanf("%d%d%lf",&a,&b,&c), add(b, a, 1.0*c), ++deg[a], ++k[a];
}
Q.push(n);
while(!Q.empty())
{
int u = Q.front(); Q.pop();
for(int i = hd[u]; i ; i = nex[i])
{
int v = to[i];
deg[v]--;
f[v] += (f[u] + val[i]) / (1.0 * k[v]);
if(!deg[v])
Q.push(v);
}
}
printf("%.2f",f[1]);
return 0;
}

  

最新文章

  1. 自定义shiro的Realm实现和CredentialsMatcher实现以及Token实现
  2. [转] vim自定义配置 和 在ubnetu中安装vim
  3. lua 高级
  4. iOS设计模式之原型模式
  5. Socket网络编程(3)--两端通信
  6. [RGeos]手簿
  7. C++类的构造、拷贝构造、析构函数等
  8. 【转】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程
  9. EXTJS 4.2 资料 控件之combo 联动
  10. 【Android Developers Training】 32. 向其它应用发送简单数据
  11. XAML: 自定义控件中事件处理的最佳实践
  12. 文档流 css中的float clear与布局
  13. git常用的命令行
  14. Python学习笔记【第四篇】:基本数据类型
  15. jsr223 md5
  16. Linux Crontab及使用salt进行管理
  17. php+mysql 解决emoji问题
  18. 【Spring】详解spring事务属性
  19. html之间传递参数
  20. poj 2762(强连通分量+拓扑排序)

热门文章

  1. VS2010: 远程访问IIS Express
  2. 网络银行木马DYRE知多少(1)
  3. 笔记本光驱位换SSD固态硬盘之硬盘格式化
  4. double x = 10 ,y = 0;y = x % 2; 这个表达式正确吗?
  5. jmeter默认生成测试报告
  6. 上机题目(0基础)- 数据库事务(Java)
  7. 编程算法 - 和为s的连续正整数序列 代码(C)
  8. 自己定义NumberPicker
  9. vmware上安装ubuntu和vmwaretools
  10. oc28--Property增强