传送门——Luogu

传送门——Vjudge


设\(f_x\)为从\(x\)走到\(N\)的期望步数

如果没有可以不动的限制,就是隔壁HNOI2013 游走

如果有可以不动的限制,那么\(f_x = \frac{\sum\limits_{(x,y) \in e} \min(f_x , f_y)}{du_x} + 1\)。可以发现如果存在\(f_y < f_x\),\(f_y\)就会对\(f_x\)产生贡献。类似于最短路松弛的过程,可以堆优化Dijkstra。

将式子化简一下,得到\(f_x = \frac{du_x + \sum\limits_{(x,y) \in e} [f_y < f_x]f_y}{\sum\limits_{(x,y) \in e} [f_y < f_x]}\),那么就可以动态计算\(f_x\)的值。

值得注意的是为什么在当前情况下\(f_y\)松弛一个比\(f_y\)大的\(f_x\)是正确的。给出一个简陋的数学证明:不妨设\(f_y = f_x - \Delta (\Delta > 0)\),又设\(f_y\)松弛\(f_x\)之后得到\(f_x'\),将\(f_x\)和\(f_x'\)代入上面的求\(f_x\)得式子,可以得到\(f_x - f_x' = \frac{\Delta}{\sum\limits_{(x,y) \in e} [f_y < f_x](1 + \sum\limits_{(x,y) \in e} [f_y < f_x])}\),所以\(0 < f_x - f_x' < f_x - f_y\),即\(f_x > f_x' > f_y\),所以不会出现松弛之后\(f_x'\)变得比\(f_x\)大或者变得比\(f_y\)小的情况。

#include<iostream>
#include<cstdio>
#include<cctype>
#include<algorithm>
#include<cstring>
#include<queue>
//This code is written by Itst
using namespace std;inline int read(){int a = 0;char c = getchar();while(!isdigit(c)) c = getchar();while(isdigit(c)){a = a * 10 + c - 48;c = getchar();}return a;
}#define ld long double
#define PDI pair < ld , int >
#define st first
#define nd second
const int MAXN = 3e5 + 7;
struct Edge{int end , upEd;
}Ed[MAXN << 1];
int head[MAXN] , in[MAXN] , cnt[MAXN];
int N , M , cntEd;
ld p[MAXN];
priority_queue < PDI > q;
bool vis[MAXN];inline void addEd(int a , int b){Ed[++cntEd] = (Edge){b , head[a]};head[a] = cntEd;++in[b];
}void Dijk(){q.push(PDI(0 , N));while(!q.empty()){PDI t = q.top(); q.pop();if(vis[t.nd]) continue;vis[t.nd] = 1; p[t.nd] = -t.st;for(int i = head[t.nd] ; i ; i = Ed[i].upEd)if(!vis[Ed[i].end]){++cnt[Ed[i].end];p[Ed[i].end] += p[t.nd];q.push(PDI(-(p[Ed[i].end] + in[Ed[i].end]) / cnt[Ed[i].end] , Ed[i].end));}}
}int main(){
#ifndef ONLINE_JUDGEfreopen("in","r",stdin);//freopen("out","w",stdout);
#endifN = read(); M = read();for(int i = 1 ; i <= M ; ++i){int a = read() , b = read();addEd(a , b); addEd(b , a);}Dijk(); printf("%.8Lf" , p[1]);return 0;
}

转载于:https://www.cnblogs.com/Itst/p/10468086.html

Luogu4745/Gym101620G CERC2017 Gambling Guide 期望、DP、最短路相关推荐

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

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

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

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

  3. [BZOJ5197] [CERC2017]Gambling Guide

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

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

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

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

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

  6. 2021牛客暑期多校训练营6 :D Gambling Monster 期望dp + fwt + cdq分治

    传送门 文章目录 题意: 思路: 题意: 给你一个大轮盘,被分成了nnn个区域0,1,2,..,n−10,1,2,..,n-10,1,2,..,n−1,每个区域被转到的概率是ai∑j=0n−1aj\f ...

  7. bzoj5197:[CERC2017]Gambling Guide

    传送门 好像概率期望也写过一些题了,但是没啥用,还是不会套路,看了题解才会写 首先设\(f[x]\)为\(x\)到\(n\)的期望最少步数,\(deg_x\)表示\(x\)的度数 不考虑不动,显然\( ...

  8. CERC2017 Gambling Guide

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

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

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

最新文章

  1. Code First 数据库的表中属性的配置
  2. win10下mysql 8.0.18 安装配置方法图文教程
  3. 怎么下载安装激活Adobe After Effects CC 2019教程
  4. Ansible基本命令
  5. remove()方法
  6. 查看tsfresh提取(时间)序列特征的变量含义
  7. 勒索病毒应急措施及防护方案
  8. 【中学】寻找阿姆斯特朗数
  9. mysql client_multi_statements_MySQL中CLIENT_MULTI_STATEMENTS的用法
  10. Kent Beck : 领导的敏捷潮
  11. mysql sql 列变成横向_SQL 统计 字段 竖向转横向 (行转列)显示
  12. PLC中ST语言的几种程序流程控制语句
  13. vscode C++ debug: lldb: unrecognized option `--interpreter=mi'
  14. Simultaneous Feature Learning and Hash Coding with Deep Neural Networks
  15. Animate.css动画
  16. js之 实现浏览器下载图片保存到本地
  17. 受邀出席线性资本投资者会议,闪马智能CEO彭垚分享AI赋能城市应用
  18. python调用鼠标驱动_selenium+Python(鼠标和键盘事件)
  19. HDU 1574 RP问题(DP)
  20. pr视频快速批量导入lut

热门文章

  1. 华为smart mt880 adsl modem 路由共享上网配置
  2. 密码学专题 加密模式的选择|传输数据加密
  3. 低调做人,才可高调行事
  4. 什么是二级分销系统?
  5. h5如何去除屏蔽页面广告
  6. java语言程序设计教程课后题答案魏永红_《Java语言程序设计基础教程》习题解答...
  7. Google的开始--剖析大规模超文本网络搜索引擎
  8. 我们的工作与计算机有很大的关系英语,新视野英语教程第二册课后翻译答案(高职高专版)...
  9. 联想ThinkServerRD640硬RAID1
  10. python编程amd和intel哪个好_计算机专业 CPU 应该用 AMD 还是 Intel?