题目

看起来非常随机游走,但是由于我们可以停在原地,所以变得不是非常一样

设$f_x$表示从$x$到$n$的期望距离

如果我们提前知道了$f$,那么我们随机到了一张到$y$的车票,发现$f_y>f_x$,那么我们不如停在原地再随一张

所以就有

\(f_x=\frac{\sum_{(x,y)\in e}1+\min(f_x,f_y)}{d_x}=1+\frac{\sum_{(x,y)\in e}\min(f_x,f_y)}{d_x}\)

这个式子不是很好看,我们将其改写一下

\(f_x=1+\frac{\sum_{(x,y)\in e}[f_y<f_x]f_y+f_x(d-\sum_{(x,y)\in e}[f_y<f_x])}{d_x}=\frac{d_x+\sum_{(x,y)\in e}[f_y<f_x]f_y}{\sum_{(x,y)\in e}[f_y<f_x]}\)

根据这个式子只有比较小的$f_y$才能去更新$f_x$,于是我们做一个类似于$\rm Dijkstra$的过程,每次从堆顶取出最小的$f_y$去更新即可

代码

#include<bits/stdc++.h>
#define re register
#define mp std::make_pair
inline int read() {
char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int maxn=3e5+5;
typedef std::pair<double,int> pii;
std::priority_queue<pii,std::vector<pii>,std::greater<pii> > q;
struct E{int v,nxt;}e[maxn<<1];
int n,num,m;
double dis[maxn],s[maxn],p[maxn];
int du[maxn],head[maxn],vis[maxn];
inline void add(int x,int y) {e[++num].v=y;e[num].nxt=head[x];head[x]=num;}
int main() {
n=read(),m=read();
for(re int x,y,i=1;i<=m;i++)
x=read(),y=read(),du[x]++,du[y]++,add(x,y),add(y,x);
dis[n]=0,q.push(mp(dis[n],n));
while(!q.empty()) {
int k=q.top().second;q.pop();
if(vis[k]) continue;vis[k]=1;
for(re int i=head[k];i;i=e[i].nxt) {
if(vis[e[i].v]) continue;
p[e[i].v]+=1;s[e[i].v]+=dis[k];
dis[e[i].v]=(du[e[i].v]+s[e[i].v])/p[e[i].v];
q.push(mp(dis[e[i].v],e[i].v));
}
}
printf("%.10lf\n",dis[1]);
return 0;
}

[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. Luogu4745/Gym101620G CERC2017 Gambling Guide 期望、DP、最短路

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

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

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

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

    题意 给定一个无向图,你需要从1点出发到达n点,你在每一点的时候,使用1个单位的代价,随机得到相邻点的票,但是你可以选择留在原地,也可以选择使用掉这张票,问到达n点的最小代价的方案的期望是多少. 分析 ...

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

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

  7. 2017-2018 ACM-ICPC, Central Europe Regional Contest (CERC 17)

    A. Assignment Algorithm 按题意模拟即可. #include<stdio.h> #include<iostream> #include<string ...

  8. 2017 CERC

    2017 CERC Problem A:Assignment Algorithm 题目描述:按照规则安排在飞机上的座位. solution 模拟. 时间复杂度:\(O(nm)\) Problem B: ...

  9. Beennan的内嵌汇编指导(译)Brennan's Guide to Inline Assembly

    注:写在前面,这是一篇翻译文章,本人的英文水平很有限,但内嵌汇编是学习操作系统不可少的知识,本人也常去查看这方面的内容,本文是在做mit的jos实验中的一篇关于内嵌汇编的介绍.关于常用的内嵌汇编(AT ...

随机推荐

  1. 分析无法进入Linux系统的原因

    上文:http://www.cnblogs.com/long123king/p/3549701.html 1: static int __init kernel_init(void * unused) ...

  2. RQNOJ PID4 数列

    题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,… (该序列实际上就是 ...

  3. Codeforces 743C - Vladik and fractions (构造)

    Codeforces Round #384 (Div. 2) 题目链接:Vladik and fractions Vladik and Chloe decided to determine who o ...

  4. 设计模式四人帮(GOF)是什么?

    1994年,有四位作者:Erich Gamma,Richard Helm,Ralph Johnson和John Vlissides发表了一本题为<设计模式 - 可重用的面向对象软件元素>的 ...

  5. Thread相关API

    参考书籍:<java多线程核心编程技术> Thread相关API,这些API可以改变线程对象的状态 新建一个线程对象,调用start方法后,系统会为该线程分配CPU资源,此时该线程处于可运 ...

  6. PHP操作XML方法之SimpleXML

    SimpleXML简介 SimpleXML 扩展提供了一个非常简单和易于使用的工具集,能将XML转换成一个带有一般属性选择器和数组迭代器的对象. 举例XML XML结构部分引用自<<深入理 ...

  7. ros机器人导航设置原点,目标点

    之前利用movebase导航定位都是通过rviz用鼠标指来指去,实验时非常方便,但实际应用总不能也人工指来指去吧,这怎么体现智能呢 启动导航后,用以前使用的rviz设设置目标点来获取map坐标系下的位 ...

  8. Mysql优化-典型的服务器配置

    内存配置相关参数 mysql内存分配需要考虑到操作系统需要使用的内存,其他应用程序所要使用的内存,mysql的会话数以及每个会话使用的内存,然后就是操作系统实例所使用的内存.生产环境的mysql往往都 ...

  9. jdk8中map新增的merge方法介绍

    1.Map.merge方法介绍 jdk8对于许多常用的类都扩展了一些面向函数,lambda表达式,方法引用的功能,使得java面向函数编程更为方便.其中Map.merge方法就是其中一个,merge方 ...

  10. vue生态系统之vue-router

    一.vue-router安装与使用 1.安装 进入项目目录中安装vue-router模块 E:\vueProject\webpackProject>cnpm install vue-router ...