Luogu4745/Gym101620G CERC2017 Gambling Guide 期望、DP、最短路
设\(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_JUDGE
freopen("in","r",stdin);
//freopen("out","w",stdout);
#endif
N = 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;
}
Luogu4745/Gym101620G CERC2017 Gambling Guide 期望、DP、最短路的更多相关文章
- 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra
题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...
- [BZOJ5197] [CERC2017]Gambling Guide
[BZOJ5197] [CERC2017]Gambling Guide 题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=5197 Solut ...
- 【bzoj4720】[Noip2016]换教室 期望dp+最短路
Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的 ...
- BZOJ5197:[CERC2017]Gambling Guide(最短路,期望DP)
Description 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易 ...
- CERC2017 Gambling Guide,最短路变形,期望dp
题意 给定一个无向图,你需要从1点出发到达n点,你在每一点的时候,使用1个单位的代价,随机得到相邻点的票,但是你可以选择留在原地,也可以选择使用掉这张票,问到达n点的最小代价的方案的期望是多少. 分析 ...
- [CERC2017]Gambling Guide
题目 看起来非常随机游走,但是由于我们可以停在原地,所以变得不是非常一样 设\(f_x\)表示从\(x\)到\(n\)的期望距离 如果我们提前知道了\(f\),那么我们随机到了一张到\(y\)的车票, ...
- 洛谷P4206 [NOI2005]聪聪与可可(期望dp+最短路)
传送门 首先,猫的走位太飘了……只能预处理…… 先对每一个点跑一遍dijkstra跑出最短路,然后再预处理出$nxt[i][j]$表示当猫在$i$老鼠在$j$时猫下一步会走到哪里 然后考虑dp,设$d ...
- 【BZOJ5197】Gambling Guide (最短路,期望)
[BZOJ5197]Gambling Guide (最短路,期望) 题面 BZOJ权限题 洛谷 题解 假设我们求出了每个点的期望,那么对于一个点,只有向期望更小的点移动的时候才会更新答案. 即转移是: ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
随机推荐
- CSS的继承和使用方式
CSS的继承 css的继承指的是当标签具有嵌套关系时,内部标签自动拥有外部标签的不冲突的样式的性质. 在Css中有些属性不允许继承,例如,border属性没有继承性.多边框类的属性都没有继承 ,例如, ...
- Android开发CheckBox控件,全选,反选,取消全选
在Android开发中我们经常会使用CheckBox控件,那么怎么实现CheckBox控件的全选,反选呢 首先布局我们的界面: <?xml version="1.0" enc ...
- leetcode-28.实现strStr()
leetcode-28.实现strStr() 题意 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字 ...
- CentOS 7.0安装
CentOS 7.0安装 本次通过虚拟机的方法安装CentOS 7.0操作系统,开启虚拟机后会出现以下界面 1.选择第一项,Install CentOS 7 (安装CentOS 7),进入下面的界面 ...
- [HBase_1] HBase安装与配置
0. 说明 1. 简介 1.1 简介 基于 HDFS 的大表软件(实时数据库) 十亿行 x 百万列 x 上千个版本 版本是通过 mvcc 技术控制:multiple version concurren ...
- 从零开始的cve分析- cve-2016-0095 简易记录
0x00 前言 看k0shl大佬的SSCTF pwn450 Windows Kernel Exploitation Writeup一文,试着写一个x64下的poc. poc地址:https://git ...
- Hibernate 5 入门指南-基于Envers
首先创建\META-INF\persistence.xml配置文件并做简单的配置 <persistence xmlns="http://java.sun.com/xml/ns/pers ...
- PHP中生产不重复随机数的方法
PHP内置函数不重复随机数 需求:要生成一个数组,这个数组里面有10个元素,都是整形,并且是1-60之间不重复的随机数. 代码: 代码示例: 1 2 3 4 5 6 7 8 9 10 ...
- Shell按行读取文件的3种方法
Shell按行读取文件的方法有很多,常见的三种方法如下: 要读取的文件: [root@mini05 -]# cat file.info 写法一: [root@mini05 -]# cat read1. ...
- 阿里云短信服务调用例子-Python
阿里云短信服务调用例子 阿里云官方文档https://helpcdn.aliyun.com/document_detail/101893.html 首先需要安装阿里云PythonSDK(下面是pyth ...