bzoj5197:[CERC2017]Gambling Guide
传送门
好像概率期望也写过一些题了,但是没啥用,还是不会套路,看了题解才会写
首先设\(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相关推荐
- [BZOJ5197] [CERC2017]Gambling Guide
[BZOJ5197] [CERC2017]Gambling Guide 题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=5197 Solut ...
- BZOJ5197:[CERC2017]Gambling Guide(最短路,期望DP)
Description 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易 ...
- luogu P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P4745 [CERC2017]Gambling Guide(期望DP + 最短路实现) Weblin ...
- 【BZOJ5197】Gambling Guide (最短路,期望)
[BZOJ5197]Gambling Guide (最短路,期望) 题面 BZOJ权限题 洛谷 题解 假设我们求出了每个点的期望,那么对于一个点,只有向期望更小的点移动的时候才会更新答案. 即转移是: ...
- 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra
题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...
- CERC2017 Gambling Guide,最短路变形,期望dp
题目链接 题面链接 题意 给定一个无向图,你需要从111点出发到达n" role="presentation" style="position: relativ ...
- Luogu4745/Gym101620G CERC2017 Gambling Guide 期望、DP、最短路
传送门--Luogu 传送门--Vjudge 设\(f_x\)为从\(x\)走到\(N\)的期望步数 如果没有可以不动的限制,就是隔壁HNOI2013 游走 如果有可以不动的限制,那么\(f_x = ...
- CERC2017 Gambling Guide
一个在邻国的铁路系统是由nn个城市(编号从11到nn),和mm条连接两个不同城市的双向铁路组成的.铁路票只能在安装在每个城市的自动售票机购买.不幸的是,黑客们已经篡改了这些售票机,现在它们有下面的规则 ...
- bzoj5197 Gambling Guide
题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...
最新文章
- SIP协议的传输层原理报文解析(解读rfc3581)(待排版)
- 罗斯蒙特1056ph电极_ROSEMOUNT 罗斯蒙特 PH电极 0396R-10-2(0396R-10-2)
- Unity4.6.2发布 支持64位iOS
- Pricing determination in SAP S4CRM
- Cron表达式【一】
- 海贼王革命家—龙—实力到底如何?
- 作者:冯是聪(1973-),男,博士,北京明略软件系统有限公司联合创始人兼CTO。...
- 剩余大学时光里要做的事
- Python 数据科学入门教程:NLTK
- springboot项目打成可依赖jar包_用IDEA把SpringBoot项目打成jar发布项目
- socketpair机制
- ie11安装程序无法继续 因为你的计算机,ie11无法安装解决方法详解
- ios图片放大之后如何不模糊_图片放大后模糊怎么办 怎么放大图片不失真|放大图片保持清晰度的方法...
- 服务器和交换机物理连接_二层、三层及四层交换机的区别 | 小知识
- Stanford Algorithms 斯坦福算法课
- 机器学习之逻辑回归(对数几率回归)
- 共享单车上的智能锁,做出来有多难?
- 博客与计算机相关的内容无法进行查看,博客检索的关键技术研究-计算机科学与技术专业论文.docx...
- 基于proteus的花样流水灯的设计(仅供参考)
- 海康嵌入式软件面试经验(已拿offer)