给出一个有向无环的连通图,起点为1,终点为N,每条边都有一个长度。

数据保证从起点出发能够到达图中所有的点,图中所有的点也都能够到达终点。

绿豆蛙从起点出发,走向终点。

到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K 。

现在绿豆蛙想知道,从起点走到终点所经过的路径总长度的期望是多少?

输入格式

第一行: 两个整数 N, M,代表图中有N个点、M条边。

第二行到第 1+M 行: 每行3个整数 a, b, c,代表从a到b有一条长度为c的有向边。

输出格式

输出从起点到终点路径总长度的期望值,结果四舍五入保留两位小数。

数据范围

1≤N≤1051≤N≤105,
1≤M≤2N1≤M≤2N

输入样例:

4 4
1 2 1
1 3 2
2 3 3
3 4 4

输出样例:

7.00

题意:起点为1,终点为n,在这个有向图上求1-n的路径长度的期望,每个点的分支是K条,那么这k条走到的概率为1/k
思路:首先我们计算的时候,因为当前点的相邻边是k条,那么每条的概率为1/k,那么路径就是1/k*(当前边长),我们可以发现当前点是由前驱的概率传过来的,我们可以计算出到每个点的概率是多少
然后再去乘当前边长度,这样点与点互相传递即可,然后我们知道具体思路后,可以转化一个dp
f[x]代表当前点到终点的期望长度,然后可以推导f[x]=1/k累加(1-k)(f[y]+边长)
f[1]即为所求答案
#include<bits/stdc++.h>
#define maxn 100005
#define mod 1000000007
using namespace std;
typedef long long ll;
ll n,m;
ll d[maxn+];
ll deg[maxn+];
double f[maxn+];
vector<pair<ll,ll> > mp[maxn+];
ll x,y,z;
int main(){
cin>>n>>m;
for(int i=;i<m;i++){
cin>>x>>y>>z;
mp[y].push_back(make_pair(x,z));
d[x]++;
deg[x]++;
}
queue<ll> q;
q.push(n);
while(!q.empty()){
ll w=q.front();
q.pop();
for(int i=;i<mp[w].size();i++){
pair<ll,ll> v=mp[w][i];
f[v.first]+=(double)(f[w]+v.second)/deg[v.first];
if(--d[v.first]==){
q.push(v.first);
}
}
}
printf("%.2lf",f[]);
}
/*
4 4
1 2 1
1 3 2
2 3 3
3 4 4
*/

 

最新文章

  1. tomcat6类加载器与类加载顺序
  2. 六、GAIA
  3. 初学画布canvas的chapter2
  4. bat自动执行telnet
  5. TFS 2013 配置的时候,提示TF255466错误
  6. IE8-模拟script onerror
  7. 设置datagridview中button按钮的背景颜色
  8. java.util.HashSet源码分析
  9. FOR XML PATH 转换问题
  10. maven和libgdx
  11. 戏说HTML5(转)
  12. 关于ClassLoader
  13. See you~(二维树状数组)
  14. mysql整理
  15. 使用Flask-SQLAlchemy管理数据库
  16. laravel windows安装
  17. Keras RetinaNet github项目安装
  18. aws ubuntu 开启root
  19. SpringBoot Docker Mysql安装,Docker安装Mysql
  20. js重写系统的弹框

热门文章

  1. spark为什么比mapreduce运行速度快很多
  2. upc组队赛15 Lattice&#39;s basics in digital electronics【模拟】
  3. appium报错及解决方案
  4. 爬取拉勾网所有python职位并保存到excel表格 对象方式
  5. 如何让Jmeter压力测试减少压力机的资源消耗
  6. Windows盘符切换,Dos命令
  7. XGBoost的推导和说明
  8. php mysql 多表查询之子查询语句
  9. UVA 12672 Eleven(DP)
  10. Python之str型转成int型