题意:给定n个点m条边。每条边的权值还没决定,权值大小为从1到m。从1出发每次等概率选一条出边向下走,直到走到n点停止,路径代价就是边权总和。由你来决定边权来使得上诉路径代价期望值最小。

解法:点这么少边这么多,比较容易想到我们先求出点的期望经过次数dp[i],那么对于一条边(u,v)它的期望经过次数就等于 (dp[u]/du[u]+dp[v]/du[v])。对于这个值排序之后贪心赋予边权大小即可。

问题在于怎么得到每个点的期望经过次数呢?

这里直接写状态转移方程  dp[u]=sigma(dp[v]/du[v]) + [u==1];(v表示出点,du表示度数)

特别要注意几个点:

①为什么是du[v]而不是du[u]?因为此时算的是从1出发的  。②为什么u==1时候才加一,其实这个问题结果和上一个一样。 ③注意终点n不参与上诉的转移,为什么? 因为一旦到达终点n之后就不再游走了。

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=+;
const double eps=1e-;
int n,m,k;
vector<int> G[N];
struct edge{
int x,y; double gx=;
bool operator < (const edge &rhs) const {
return gx>rhs.gx;
}
}e[N*N]; double c[N][N],b[N];
void Gauss() {
int r=;
for (int i=;i<=n;i++) {
int j=r+;
while (j<=m && fabs(c[j][i])<eps) j++; //从下面方程找一个第i位不为0的
if (j==m+) continue; //不存在第i位不为0的方程
r++; //矩阵的秩
for (int k=;k<=n;k++) swap(c[r][k],c[j][k]); //存在第i位不为0的方程,交换上去
swap(b[r],b[j]); for (int j=;j<=m;j++) { //以r方程回代m个方程
if (r==j) continue;
double rate=c[j][i]/c[r][i];
for (int k=i;k<=n;k++) c[j][k]-=c[r][k]*rate;
b[j]-=b[r]*rate;
}
} // for (int i=1;i<=m;i++) if (b[i]) { //判断无解情况
// bool ok=0;
// for (int j=1;j<=n;j++) if (c[i][j]) { ok=1; break; }
// if (!ok) { puts("Inconsistent data."); return; }
// } //if (r<n) { puts("Multiple solutions."); return; } //有解但多解 for (int i=;i<=n;i++) b[i]=b[i]/c[i][i]; //唯一解求解
} int main()
{
cin>>n>>k; m=n;
for (int i=;i<=k;i++) {
int x,y; scanf("%d%d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
e[i].x=x; e[i].y=y; e[i].gx=;
}
memset(c,,sizeof(c));
memset(b,,sizeof(b));
for (int i=;i<=n;i++) {
c[i][i]+=1.0;
if (i==n) break;
for (int j=;j<G[i].size();j++) {
int v=G[i][j];
if (v==n) continue;
c[i][v]-=1.0/G[v].size();
}
if (i==) b[i]+=1.0;
}
Gauss();
for (int i=;i<=k;i++) {
e[i].gx+=b[e[i].x]/G[e[i].x].size();
e[i].gx+=b[e[i].y]/G[e[i].y].size();
}
sort(e+,e+k+);
double ans=;
for (int i=;i<=k;i++) ans+=e[i].gx*i;
printf("%.3lf\n",ans);
return ;
}

BZOJ-3143/洛谷3232 游走(HNOI2013)概率DP的更多相关文章

  1. BZOJ3141 Hnoi2013 游走 【概率DP】【高斯消元】*

    BZOJ3141 Hnoi2013 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点 ...

  2. l洛谷 P6030 [SDOI2012]走迷宫 概率与期望+高斯消元

    题目描述 传送门 分析 首先判掉 \(INF\) 的情况 第一种情况就是不能从 \(s\) 走到 \(t\) 第二种情况就是从 \(s\) 出发走到了出度为 \(0\) 的点,这样就再也走不到 \(t ...

  3. 洛谷P1850 换教室(概率dp)

    传送门 我的floyd竟然写错了?今年NOIP怕不是要爆零了? 这就是一个概率dp 我们用$dp[i][j][k]$表示在第$i$个时间段,已经申请了$j$次,$k$表示本次换或不换,然后直接暴力转移 ...

  4. 洛谷P2719 搞笑世界杯 题解 概率DP入门

    作者:zifeiy 标签:概率DP 题目链接:https://www.luogu.org/problem/P2719 我们设 f[n][m] 用于表示还剩下n张A类票m张B类票时最后两张票相同的概率, ...

  5. BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元

    BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...

  6. [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)

    [BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...

  7. 洛谷 P4072 [SDOI2016]征途 斜率优化DP

    洛谷 P4072 [SDOI2016]征途 斜率优化DP 题目描述 \(Pine\) 开始了从 \(S\) 地到 \(T\) 地的征途. 从\(S\)地到\(T\)地的路可以划分成 \(n\) 段,相 ...

  8. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  9. 洛谷 P3177 [HAOI2015]树上染色 树形DP

    洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...

随机推荐

  1. C++ begin()和end()

    begin(a)指向数组a的第一个元素,end(a)指向数组a最后一个元素之后的一个元素 #include <iostream> using namespace std; int main ...

  2. hdu 6143: Killer Names (2017 多校第八场 1011)

    题目链接 题意,有m种颜色,给2n个位置染色,使左边n个和右边n个没有共同的颜色. 可以先递推求出恰用i种颜色染n个位置的方案数,然后枚举两边的染色数就可以了,代码很简单. #include<b ...

  3. Java文件处理之FileReader可输出中文字符

    import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public ...

  4. The list of list is modified unexpected, python

    Be careful! The list of list is modified unexpected, python # code patch A: list = [1,2,3,4,5,6,7] p ...

  5. 【Java】Java调用第三方接口

    Get请求与Http请求 https://www.w3school.com.cn/tags/html_ref_httpmethods.asp HttpClient HTTP 协议可能是现在 Inter ...

  6. Milking Grid poj2185

    Milking Grid POJ - 2185 时限: 3000MS   内存: 65536KB   64位IO格式: %I64d & %I64u 提交 状态 已开启划词翻译 问题描述 Eve ...

  7. 在java中

    // 进入prompt回调 public class JSBridgeWebChromeClient extends WebChromeClient { @Override public boolea ...

  8. (转)dial tcp 10.96.0.1:443: getsockopt: no route to host --- kubernetes(k8s)DNS 服务反复重启

    转:https://blog.csdn.net/shida_csdn/article/details/80028905 kubernetes(k8s)DNS 服务反复重启解决: k8s.io/dns/ ...

  9. 拒绝从入门到放弃_《Openstack 设计与实现》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Openstack 设计与实现>是一本非常值得推荐的书,为数不多的 Openstack 开发向中文书籍中的精品.如果希望从事 Ope ...

  10. jmeter之关联的使用(正则、json)

    部分接口的测试中,一个接口会依赖上一个接口的响应信息,但上一个接口的响应信息又不是固定不变的,这时候,需要提取上一个接口的响应信息,将二者每一次的信息关联起来 目录 1.应用场景 2.jmeter正则 ...