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 ...
随机推荐
- Android调用系统图库返回路径
调用系统图库: Intent intent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI); ...
- 生成器(generator,yield),next,send
#生成器 def generator(): for i in range(200): yield '哇哈哈%s' %i g = generator() #调用生成数函数,接受作用 ret = g.__ ...
- perfect-scrollbar在vue中的使用
1.下载perfect-scrollbar依赖包 npm install perfect-scrollbar 2.perfect-scrollbar特性 1)直接下载依赖包及包含css样式和js 2) ...
- 排序算法----快速排序java
快速排序是对冒泡排序的一种改进,平均时间复杂度是O(nlogn) import java.util.Arrays; import java.util.Scanner; public class tes ...
- shell编程—变量(三)
在shell脚本中,变量分两种,系统变量和自定义变量. 系统默认变量是系统自带的一些变量,如path为路径变量 用户自定义变量为在编写吧脚本的时候自己定义的一些变量 变量名命名规则 首个字符必须为字母 ...
- mssql sqlserver 规范使用方法分享
转自:http://www.maomao365.com/?p=5586 摘要:下文主要讲述sql server表设计及脚本编写中,相关规范 ———————————数据表字段类型选择:字符类型根据长度选 ...
- SQL Server @@ERROR的小误区大Bug
在公司项目中看到有这样使用事务的: -- 开启事务 BEGIN TRAN ) ) BEGIN ROLLBACK TRAN END COMMIT TRAN 乍一看没啥问题,仔细思考就能发现有很大的问题. ...
- iOS图片存在本地、再从本地获取图片
图片存在本地.再从本地获取图片 //将图片保存到本地 + (void)SaveImageToLocal:(UIImage*)image Keys:(NSString*)key { NSUser ...
- 后台登录(包含验证码)的php代码实现
login.html文件 <html> <title>login in</title> <body> <form action="han ...
- JavaScript -- 时光流逝(八):js中的事件Event的使用
JavaScript -- 知识点回顾篇(八):js中的事件Event的使用 事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行. (1) onabort : onabort 事件会在图像 ...