传送门

好像概率期望也写过一些题了,但是没啥用,还是不会套路,看了题解才会写

首先设\(f[x]\)为\(x\)到\(n\)的期望最少步数,\(deg_x\)表示\(x\)的度数

不考虑不动,显然\(f[x]=\sum_{(x,y)\in E}\frac{f[y]+1}{deg_x}\)

由于可以不动,\(f[x]=\sum_{(x,y)\in E}\frac{\min(f[x],f[y])+1}{deg_x}\)

然后我们其实也就是只有当\(f[y]<f[x]\)时才会产生贡献

这个条件和\(\rm dijkstra\)的松弛操作很相似,所以可以用\(\rm dijkstra\)来计算

但是这个式子并不好维护,因为只有\(f[y]<f[x]\)的时候才会产生贡献,那么很多枚举都是无效的

所以我们可以改一下式子\(f[x]=\frac{deg_x+\sum_{(x,y)\in E,f[y]<f[x]}f[y]}{\sum_{(x,y)\in E}[f[y]<f[x]]}\)

这样就可以动态的维护了

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
void read(int &x){char ch; bool ok;for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
const int maxn=3e5+10;bool vis[maxn];
int n,m,cnt,pre[maxn*2],nxt[maxn*2],h[maxn];
double f[maxn],sum[maxn],in[maxn],t[maxn];
struct oo{double x;int y;};
priority_queue<oo>q;
bool operator<(oo a,oo b){return a.x>b.x;}
void add(int x,int y){pre[++cnt]=y,nxt[cnt]=h[x],h[x]=cnt,in[x]++;pre[++cnt]=x,nxt[cnt]=h[y],h[y]=cnt,in[y]++;
}
void dijkstra(){memset(f,127,sizeof f);f[n]=0,q.push((oo){f[n],n});while(!q.empty()){int x=q.top().y;q.pop();if(vis[x])continue;vis[x]=1;for(rg int i=h[x];i;i=nxt[i])if(f[pre[i]]>=f[x]){t[pre[i]]++,sum[pre[i]]+=f[x];f[pre[i]]=(in[pre[i]]+sum[pre[i]])/t[pre[i]];q.push((oo){f[pre[i]],pre[i]});}}
}
int main(){read(n),read(m);for(rg int i=1,x,y;i<=m;i++)read(x),read(y),add(x,y);dijkstra(),printf("%.6lf",f[1]);
}

转载于:https://www.cnblogs.com/lcxer/p/11099223.html

bzoj5197:[CERC2017]Gambling Guide相关推荐

  1. [BZOJ5197] [CERC2017]Gambling Guide

    [BZOJ5197] [CERC2017]Gambling Guide 题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=5197 Solut ...

  2. BZOJ5197:[CERC2017]Gambling Guide(最短路,期望DP)

    Description 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易 ...

  3. luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...

  4. 【BZOJ5197】Gambling Guide (最短路,期望)

    [BZOJ5197]Gambling Guide (最短路,期望) 题面 BZOJ权限题 洛谷 题解 假设我们求出了每个点的期望,那么对于一个点,只有向期望更小的点移动的时候才会更新答案. 即转移是: ...

  5. 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra

    题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...

  6. CERC2017 Gambling Guide,最短路变形,期望dp

    题目链接 题面链接 题意 给定一个无向图,你需要从111点出发到达n" role="presentation" style="position: relativ ...

  7. Luogu4745/Gym101620G CERC2017 Gambling Guide 期望、DP、最短路

    传送门--Luogu 传送门--Vjudge 设\(f_x\)为从\(x\)走到\(N\)的期望步数 如果没有可以不动的限制,就是隔壁HNOI2013 游走 如果有可以不动的限制,那么\(f_x = ...

  8. CERC2017 Gambling Guide

    一个在邻国的铁路系统是由nn个城市(编号从11到nn),和mm条连接两个不同城市的双向铁路组成的.铁路票只能在安装在每个城市的自动售票机购买.不幸的是,黑客们已经篡改了这些售票机,现在它们有下面的规则 ...

  9. bzoj5197 Gambling Guide

    题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...

最新文章

  1. SIP协议的传输层原理报文解析(解读rfc3581)(待排版)
  2. 罗斯蒙特1056ph电极_ROSEMOUNT 罗斯蒙特 PH电极 0396R-10-2(0396R-10-2)
  3. Unity4.6.2发布 支持64位iOS
  4. Pricing determination in SAP S4CRM
  5. Cron表达式【一】
  6. 海贼王革命家—龙—实力到底如何?
  7. 作者:冯是聪(1973-),男,博士,北京明略软件系统有限公司联合创始人兼CTO。...
  8. 剩余大学时光里要做的事
  9. Python 数据科学入门教程:NLTK
  10. springboot项目打成可依赖jar包_用IDEA把SpringBoot项目打成jar发布项目
  11. socketpair机制
  12. ie11安装程序无法继续 因为你的计算机,ie11无法安装解决方法详解
  13. ios图片放大之后如何不模糊_图片放大后模糊怎么办 怎么放大图片不失真|放大图片保持清晰度的方法...
  14. 服务器和交换机物理连接_二层、三层及四层交换机的区别 | 小知识
  15. Stanford Algorithms 斯坦福算法课
  16. 机器学习之逻辑回归(对数几率回归)
  17. 共享单车上的智能锁,做出来有多难?
  18. 博客与计算机相关的内容无法进行查看,博客检索的关键技术研究-计算机科学与技术专业论文.docx...
  19. 基于proteus的花样流水灯的设计(仅供参考)
  20. 海康嵌入式软件面试经验(已拿offer)

热门文章

  1. python爬虫——使用requests库和xpath爬取猎聘网职位详情
  2. JAVA从菜鸟到架构师系列课程
  3. 在线图书销售系统顺序图_myON电子图书馆最全介绍
  4. 16位深度图用毒霸软件打开显示异常
  5. STM32一个定时器同时捕获4路PWM波
  6. python 代码编译
  7. iOS用推送通知来做出聊天
  8. 够快联想坚果云这三个产品哪个更好
  9. java学习之服务器第26天( --form表单-- 四大域对象--cookie)
  10. 欢迎使用CSDN-markdown编辑器凄凄切切群群群群群群群群