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

分析

dp [i]  : 从I  到 n 需要coin  数量的期望
显然 dp[n]=。逆序更新 (除了dp[n] ,其他的全初始化为 inf)
如果当前点为u,v为u的相邻点。
v第一次被更新,那么 dp[v]=(deg[v]-)/deg[v]*dp[v]+/deg[v]*dp[u]+(+1是因为又需要一个coin)deg[v]- 为留在v点的概率,即dp[v]=((deg[v]-)*dp[v]+dp[u])/deg[v]+
数学变化后:dp[v]=deg[v]+dp[u]
如果当前点为 P,v为p的相邻点
如果 dp[v]>dp[p] ,那么v再次被更新,假设为第二次更新,那么:
dp[v]=((deg[v]-)*dp[v]+dp[u]+dp[p])/deg[v]+ 即 dp[v]=(dp[p]+dp[u]+deg[v])/
同理第n次更新时:dp[v]=(dp[u]+dp[p]+dp[q]+....+deg[v])/n
Used[v]:用来标记v现在是第几次被更新。可以得到:
double tmp = dp[v]*used[v];
used[v]++;
dp[v] = (tmp+xp)/used[v];
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N =;
double dp[N];
#define P pair<double,int>
const double inf = ;
int n,m,x,y;
bool vis[N];
int used[N],deg[N];
struct Node{
int fr,to,nex;
}e[N*];
int head[N],cnt;
void init()
{
for(int i =;i<N;i++)
{head[i] = -;
vis[i]=;
used[i]=;
deg[i]=;
}
cnt = ;
}
void add(int u,int v)
{
e[cnt].fr=u;e[cnt].to=v;
e[cnt].nex=head[u];head[u]=cnt++;
} void solve()
{
for(int i =;i<n;i++) dp[i] = inf; priority_queue<P,vector<P>,greater<P> >que;//是greater
que.push(P(,n));
vis[n] =;
while(!que.empty()){
P p =que.top();que.pop();
int u = p.second;double xp =p.first;
if(dp[u]<xp) continue;
for(int i =head[u];i+;i=e[i].nex){
Node nod = e[i];
int v=nod.to;
if(!vis[v]){
vis[v] = ;
used[v]=;
dp[v] = deg[v]+xp;
que.push(P(dp[v],v));
}
else if(dp[v]>xp){
double tmp = dp[v]*used[v];
//xp+=tmp; 这样 xp 在不断变化
used[v]++;
//dp[v]=xp/used[v];
dp[v] = (tmp+xp)/used[v];
que.push(P(dp[v],v));
}
}
} }
int main()
{ init();
scanf("%d%d",&n,&m);
for(int i =;i<m;i++){
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
deg[x]++;deg[y]++;
} solve();
printf("%.12f\n",dp[]);
return ;
}

CERC2017 Gambling Guide,最短路变形,期望dp的更多相关文章

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

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

  2. [BZOJ5197] [CERC2017]Gambling Guide

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

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

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

  4. Luogu4745/Gym101620G CERC2017 Gambling Guide 期望、DP、最短路

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

  5. [CERC2017]Gambling Guide

    题目 看起来非常随机游走,但是由于我们可以停在原地,所以变得不是非常一样 设\(f_x\)表示从\(x\)到\(n\)的期望距离 如果我们提前知道了\(f\),那么我们随机到了一张到\(y\)的车票, ...

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

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

  7. 【bzoj4720】[Noip2016]换教室 期望dp+最短路

    Description 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程.在可以选择的课程中,有2n节 课程安排在n个时间段上.在第i(1≤i≤n)个时间段上,两节内容相同的 ...

  8. 【bzoj1415】【聪聪和可可】期望dp(记忆化搜索)+最短路

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=57148470 Descrition 首先很明显是 ...

  9. 【NOI2005】聪聪与可可 题解(最短路+期望DP)

    前言:学长讲的太神了:自己还能推出来DP式子,挺开心. -------------------------- 题目链接 题目大意:给定一张含有$n$个结点$m$条边的无向连通图.现在聪聪在点$s$,可 ...

随机推荐

  1. Vue2自定义指令改变DOM值后未刷新data中绑定属性的值

    标签(空格分隔): Vue 自定义指令用于过滤输入框,只允许输入数字: Vue.directive('numberOnly', { bind: function (el, binding) { el. ...

  2. 用AutoHotkey一键完成Xmind里的几个功能

    F5一键添加超链接(类型为主题),常规步骤:Ctrl_h打开窗口,点击[主题],激活光标到输入框. Ctrl-i一键添加截取的图片,常规步骤是:打开画图→粘贴→保存图片为文件→Xmind里Ctrl-i ...

  3. elasticsearch 概念

    elasticsearch 来源:https://baike.baidu.com/item/elasticsearch/3411206?fr=aladdin ElasticSearch是一个基于Luc ...

  4. Centos6.5(Linux)安装Nginx

    1.安装nginx依赖的库pcre       下载地址:http://sourceforge.net/projects/pcre/    2.解压pcre        zip解压方式:unzip ...

  5. 【转】 ios的手势操作之UIGestureRecognizer浅析

    一.概述 iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式: - (void)touchesBegan:(NSSet *)touches withE ...

  6. 利用babel自动编译es6文件

    一.检查File-Watchers中Babel的Arguments,有一项presets的设置,把他更改为=es2015,详细设置如下: $FilePathRelativeToProjectRoot$ ...

  7. 去掉video视频播放器下的下载按钮

    去掉video视频播放器下的下载按钮: video::-internal-media-controls-download-button { display:none; } video::-webkit ...

  8. java中equals以及==的用法(简单介绍)

    简单介绍 equals方法是java.lang.Object类的方法 有两种用法说明: 一.对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同. 1.“==”比较两 ...

  9. 【luoguP1086】【2004NOIP-Ua】花生采摘

    P1086 花生采摘 题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都 ...

  10. ISIS Scanner Errors codes

    This section lists errors sorted by number: Error # Defined Constant String Defined In PIXDFLT 0 PIX ...