【题目链接】

  • 点击打开链接

【思路要点】

  • DP计算出不删边时每个点出发的期望路径长度以及从起始点经过每个点的概率。
  • 枚举删除的边,重新计算该边出点的期望路径长度,并计算其变化量,乘以经过该点的概率,与答案取最大值。
  • 时间复杂度\(O(N+M)\)。

【代码】

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 10005;
const double eps = 1e-9;
template <typename T> void chkmax(T &x, T y) {x = max(x, y); }
template <typename T> void chkmin(T &x, T y) {x = min(x, y); }
template <typename T> void read(T &x) {x = 0; int f = 1;char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') f = -f;for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';x *= f;
}
template <typename T> void write(T x) {if (x < 0) x = -x, putchar('-');if (x > 9) write(x / 10);putchar(x % 10 + '0');
}
template <typename T> void writeln(T x) {write(x);puts("");
}
struct edge {int dest; double p; };
vector <edge> a[MAXN], b[MAXN];
int n, m; bool vis[MAXN];
double sd[MAXN], dp[MAXN], p[MAXN];
double getdp(int pos) {if (vis[pos]) return dp[pos];vis[pos] = true;double ans = 0;for (unsigned i = 0; i < a[pos].size(); i++)ans += a[pos][i].p * (1 + getdp(a[pos][i].dest));return dp[pos] = ans;
}
double getp(int pos) {if (vis[pos]) return p[pos];vis[pos] = true;if (pos == 1) return p[pos] = 1;double ans = 0;for (unsigned i = 0; i < b[pos].size(); i++)ans += b[pos][i].p * getp(b[pos][i].dest);return p[pos] = ans;
}
int main() {read(n), read(m);for (int i = 1; i <= m; i++) {int x, y; double z;read(x), read(y), read(z);x++, y++, sd[x] += z;a[x].push_back((edge) {y, z});b[y].push_back((edge) {x, z});}for (int i = 1; i <= n; i++) {for (unsigned j = 0; j < a[i].size(); j++)a[i][j].p /= sd[i];for (unsigned j = 0; j < b[i].size(); j++)b[i][j].p /= sd[b[i][j].dest];}for (int i = 1; i <= n; i++)if (!vis[i]) dp[i] = getdp(i);memset(vis, false, sizeof(vis));for (int i = 1; i <= n; i++)if (!vis[i]) p[i] = getp(i);double ans = 0;for (int i = 1; i <= n; i++)for (unsigned j = 0; j < a[i].size(); j++) {double tmp = dp[i] - a[i][j].p * (1 + dp[a[i][j].dest]);if (fabs(a[i][j].p - 1) <= eps) tmp = 0;else tmp /= 1 - a[i][j].p;chkmax(ans, (tmp - dp[i]) * p[i]);}printf("%.6lf\n", ans + dp[1]);return 0;
}

【BZOJ3470】Freda’s Walk相关推荐

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

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

  2. 【Tyvj1922】Freda的迷宫

    Freda的迷宫 Description Freda是一个迷宫爱好者,她利用业余时间建造了许多迷宫.每个迷宫都是由若干房间和走廊构成的,每条走廊都连接着两个不同的房间,两个房间之间最多只有一条走廊直接 ...

  3. 【BZOJ30472125】Freda的传呼机

    Description 为了 随时 与 rainbow快速交流, Freda制造了 两部传呼机 .Freda和 rainbow所在的地方有N座房屋.M条双向 光缆 .每条光缆连接两座房屋, 传呼机发出 ...

  4. 【HDOJ】4579 Random Walk

    1. 题目描述 一个人沿着一条长度为n个链行走,给出了每秒钟由i到j的概率($i,j \in [1,n]$).求从1开始走到n个时间的期望. 2. 基本思路 显然是个DP.公式推导也相当容易.不妨设$ ...

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

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

  6. 【NOIP2013模拟】Freda的传呼机

    [NOIP2013模拟]Freda的传呼机 Time Limits: 100 ms Memory Limits: 131072 KB Description 为了 随时 与 rainbow快速交流, ...

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

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

  8. 【2021-12-06】爬取关键词图片 - 去掉重复图片

    ''' 爬取指定关键字图片 ''' import re # 正则表达式,解析网页 import requests # 请求网页 import traceback import osdef dowmlo ...

  9. 【重磅】谷歌2021博士奖研金完整名单出炉,13个方向共75人获奖

    来源:机器之心 [导读]:谷歌的博士生奖研金项目(Google Ph.D Fellowship Program)创立于 2009 年,旨在奖励在计算机学科及其相关学科或者其它前瞻科研领域方面表现优异的 ...

最新文章

  1. HTTP状态 500之java.lang.StackOverflowErro
  2. MPB:微生物所东秀珠组-​​基于16S rRNA基因和基因组序列对细菌物种的初步鉴定...
  3. django项目允许其他机器访问
  4. ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中
  5. postgresql数据表增删改:使用pgadmin和SQL的方式实现
  6. 第六章插图以及代码文件和插图之间的对应关系
  7. java class和this_转:java 类名 this 的使用
  8. 2019春季发布会后苹果股价一度跌逾2% 盘后微涨0.22%
  9. php function函数用法,js的function函数是什么?js中function的用法
  10. C++_类和对象_封装_访问权限_C++中struct和class的区别---C++语言工作笔记037
  11. mysql的配置以及后端数据库的连接
  12. mysql 外键详解_mysql 中的外键key值的详解
  13. vuex中actions配合mutation处理axios请求
  14. 201671010128 2017-10-08《Java程序设计》之接口与内部类
  15. HNUCM-1322:调酒壶里的酸奶
  16. Python基础PTA习题答案
  17. 数学分析教程 第五章学习感受
  18. STM32单片机驱动L298N
  19. chrome下载速度慢,手把手教学
  20. 拼音转汉字算法(隐马尔科夫、维特比算法)

热门文章

  1. pycharm安装netmiko、xlwt
  2. 鸡兔同笼python程序怎么写_关于鸡的歇后语
  3. uni-app 动画
  4. CDMA码片序列问题
  5. 一封来自大佬的密信待查收
  6. 苹果侧边滑动返回_iOS系统右滑返回手势问题及解决方案
  7. 万里汇WorldFirst个人和企业帐户注册教程(送$25+1%提现费)
  8. 解决windows 2003 sp1下安装arcsde 9.0 for sql server 2000 sp4概要方案
  9. java使用微信表情代码_iOS高仿微信表情输入功能代码分享
  10. 惊蛰时节,最好看的微信公众号图文排版,全在这里了