题意
给定一个无向图,你需要从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. aws查看官方centos镜像imageid

    aws ec2 describe-images --owners aws-marketplace --filters Name=product-code,Values=aw0evgkw8e5c1q41 ...

  2. vue-cli run dev 和 run build 出现的问题(运行项目、打包项目)

    前些天做项目,过程中遇到了一个比较奇怪的问题:npm run dev 和 npm run build 的时候,出现了错误,导致项目无法启动.打包无法成功.报了一堆错误: 错误展示: 找了一下解决方案, ...

  3. google Cayley图谱数据库初试

    一.安装 mkdir cayley cd cayley mkdir src export GOPATH=$(pwd) go get github.com/google/cayley go build ...

  4. 【转】Activity、Window、View的关系

    1.先看一个现象 1 2 3 4 5 6 7 8 9 10 11 public class MainActivity extends Activity {       @Override     pr ...

  5. 树的直径的求法即相关证明【树形DP || DFS】

    学习大佬:树的直径求法及证明 树的直径 定义: 一棵树的直径就是这棵树上存在的最长路径. 给定一棵树,树中每条边都有一个权值,树中两点之间的距离定义为连接两点的路径边权之和.树中最远的两个节点之间的距 ...

  6. ABP问题记录

    按照<Asp.NET Core2.0与 EF的ABP框架入门视频教程>(https://ke.qq.com/course/287301)下载了3.9版本的ABP,开始学习,下面记录遇到的问 ...

  7. 【luogu P1456 Monkey King】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1456 左偏树并查集不加路径压缩吧... #include <cstdio> #include & ...

  8. PAT1064. Complete Binary Search Tree

    1064. Complete Binary Search Tree 题目大意 给定一个序列, 求其 生成Complete BST 的层序遍历. 思路 最开始把这个题想复杂了, 还想着建立结构体, 其实 ...

  9. Vue nodejs商城-订单模块

    一.订单列表渲染 新建OrderConfirm.vue订单确认页面,添加路由 src/router/index.js添加路由 import OrderConfirm from '@/views/Ord ...

  10. Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 三种处理方法

    简介:Spring Data JPA 其实就是JDK方式(还有一种cglib的方式需要Class)的动态代理 (需要一个接口 有一大堆接口最上边的是Repository接口来自org.springfr ...