3470: Freda’s Walk

Time Limit: 1 Sec Memory Limit: 128 MB
Description

雨后的Poetic Island空气格外清新,于是Freda和Rainbow出来散步。 Poetic Island的交通可以看作一张n个点、m 边的有向无环图。由于刚下过雨,每条边都有一个积水深度,而恰好Freda 和Rainbow都喜欢踩水玩儿,于是Ta们从某个点出发,选择走向哪条边的概率与该边的积水深度是成正比的。即:如果Freda和Rainbow现在在点u,点u 出发的所有边的积水深度之和为s,从u到v的边积水深度为w,那么Ta们选择走向v的概率就是 w/s。
Ta们会一直走下去,直到到达一个没有出边的点,那么散步的路程长度就是走过的边的数量。更特殊的是,Freda和Rainbow在出发之前还可以选择一条边,在散步过程中无视这条边的存在(当然也可以不选择)。请你帮忙计算一下,Ta 们从0号点出发,散步的路程长度的期望值最大是多少?

Input

第一行两个正整数 n、m。
接下来m行每行三个整数u、v、w,表示从u到v有一条无向边,积水深度为w。

Output

输出Freda和Rainbow散步的路程长度的最大期望值,四舍五入保留六位小数。

Sample Input

4 5

0 1 2

0 2 1

0 3 3

1 3 1

2 3 4

Sample Output

2.000000

HINT

对于 100% 的数据,2<=n<=10000,1<=m<=100000,0<=u,v

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
#define Maxn 100010
#define Maxm 1000010struct node{int u, to, w, nxt, flag;
}ed[Maxm], ted[Maxm];int head[Maxn], idc;
int sum[Maxn], fed[Maxn];
bool vis[Maxn];
double g[Maxn], f[Maxn];void adde(int u, int v, int w){ed[++idc].u = u; ed[idc].to = v; ed[idc].w = w;ed[idc].nxt = head[u]; head[u] = idc; ed[idc].flag = 1;ted[idc].u = v; ted[idc].to = u; ted[idc].w = w; ted[idc].nxt = fed[v]; fed[v] = idc;//建立反向边
}void dfs2(int u){if( vis[u] ) return;vis[u] = 1;if(u == 0) { g[u] = 1; return;}for(int i=fed[u]; i; i=ted[i].nxt){int v = ted[i].to;dfs2( v );g[u] += g[v] * ted[i].w * 1.0 / sum[v];//到达每个点的概率 }
}void dfs(int u){if( vis[u] ) return;vis[u] = 1; f[u] = 0;for(int i=head[u]; i; i=ed[i].nxt) if( ed[i].flag ){//int v = ed[i].to;dfs( v );f[u] += (f[v] + 1) * ed[i].w * 1.0 / sum[u];}return;
}int main(){freopen("secretbase.in", "r", stdin);freopen("secretbase.out", "w", stdout);int n, m;scanf("%d%d", &n, &m);idc = 0;memset(head, 0, sizeof(head));for(int i=1; i<=m; i++){int u, v, w;scanf("%d%d%d", &u, &v, &w);sum[u] += w;adde(u, v, w);}memset(vis, 0, sizeof(vis));for(int i=0; i<n; i++) g[i] = 0;for(int i=0; i<n; i++) dfs2( i );memset(vis, 0, sizeof(vis));dfs( 0 );double mx = f[0];for(int i=1; i<=idc; i++){int x = ed[i].u, y = ed[i].to;double cc;if(sum[x] != ed[i].w) cc = (f[x]*sum[x]*1.0/(sum[x]-ed[i].w)-(f[y]+1)*ed[i].w*1.0/(sum[x]-ed[i].w))-f[x];else cc = -f[x];//删掉这条边所做出的贡献 mx = max(mx, f[0] + g[x]*cc);}printf("%.6lf\n", mx);return 0;
}

BZOJ 3470 Freda’s Walk (期望)相关推荐

  1. 【BZOJ 3470】3470: Freda’s Walk 期望

    3470: Freda's Walk Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 42  Solved: 22 Description 雨后的Poe ...

  2. BZOJ 3470: Freda’s Walk

    没人写题解的样子.. 有生之年第一次刷了个rank1 望dalao们轻虐 正着走一遍 然后求出从1到每个点的概率g 反着走一遍 求出每个点对1的贡献f(过程跟求期望没什么两样) 最后考虑割一条边 算一 ...

  3. bzoj3470 Freda's Walk (期望概率DP)

    bzoj3470 Freda's Walk 原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3470 题意: 有向无环图,求从点0出发,走到一 ...

  4. 【BZOJ3470】Freda’s Walk 概率与期望

    [BZOJ3470]Freda's Walk Description 雨后的Poetic Island空气格外清新,于是Freda和Rainbow出来散步. Poetic Island的交通可以看作一 ...

  5. BZOJ.2707.[SDOI2012]走迷宫(期望 Tarjan 高斯消元)

    题目链接 一个点到达终点的期望步数 \(E_i=\sum_{(i,j)\in G}\frac{E_j+1}{out[i]}\),\(out[i]\)为点\(i\)的出度. 那么对于一个DAG可以直接在 ...

  6. 【BZOJ3470】Freda’s Walk

    [题目链接] 点击打开链接 [思路要点] DP计算出不删边时每个点出发的期望路径长度以及从起始点经过每个点的概率. 枚举删除的边,重新计算该边出点的期望路径长度,并计算其变化量,乘以经过该点的概率,与 ...

  7. BZOJ 3566: [SHOI2014]概率充电器 期望DP + 树形DP

    Time Limit: 40 Sec Memory Limit: 256 MB Submit: 1276 Solved: 558 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世 ...

  8. Luogu 4284 [SHOI2014]概率充电器

    BZOJ 3566 树形$dp$ + 概率期望. 每一个点的贡献都是$1$,在本题中期望就等于概率. 发现每一个点要通电会在下面三件事中至少发生一件: 1.它自己通电了. 2.它的父亲给它通电了. 3 ...

  9. android底部导航栏毛玻璃,取消导航栏navigationBar的半透明/毛玻璃效果

    Unity3d学习 预设体(prefab)的一些理解 之前一直在想如果要在Unity3d上创建很多个具有相同结构的对象,是如何做的,后来查了相关资料发现预设体可以解决这个问题! 预设体的概念: 组件的 ...

最新文章

  1. 初步了解Linux strace 命令和跟踪进程产生的系统调用
  2. [下载]青岛交通旅游地图[download]
  3. Veeam 9.5U3集中管理Agent详解
  4. java jsp输出乱码,这是小弟我的JSP文件,输出后,汉字显示为乱码,怎么解决
  5. python接口自动化 post请求,body 带headers参数
  6. SpringBoot酒店管理系统 hotel.liuyanzhao.com
  7. 吉林大学计算机游戏程序设计,吉林大学在2018年大学生程序设计竞赛中夺得佳绩...
  8. windows安装docker环境并配置镜像
  9. ROS中使用A星算法进行路径规划
  10. STM32 硬件I2C读写AT24C02/08
  11. Fspecial函数用法
  12. 一个未完成创业项目的思考——创业杂记
  13. 基于TI Sitara系列AM437x ARM Cortex-A9核心板 处理器
  14. 2011-6-9 有趣的Google能发声音乐电吉他Logo
  15. Zabbix 主被动模式解析
  16. 【论文阅读】Occupancy Networks: Learning 3D Reconstruction in Function Space
  17. 将示波器信号完整数据导入Matlab进行分析
  18. 支付宝当面付参数获取步骤,个人申请使用支付宝当面付
  19. greenDao小坑一个
  20. CentOS 7 搭建 TinyProxy 代理

热门文章

  1. 软考 软件设计师 第五版+历年真题
  2. python—最大公约数和最小公倍数
  3. 程序员如何避免「温水煮码农」
  4. linux环境pwd下ls,Linux基础命令2:cd、pwd、ls、stat、touch、alias
  5. 2-直观体验OAuth2
  6. 计算机专业课考研都有哪些,计算机专业考研的课程有哪些
  7. qq登陆inc.php,JTBC(php) 版 QQ 一键登录实现过程
  8. 单片机七阶音符_单片机 演奏音符
  9. 面试问题总结——关于OpenCV
  10. Keil MDK介绍