期望\(DP\)入门题目。

关键思想:无向边的转移作为有向边考虑。其他的就是直接上全期望公式。由于这个题目不是有向无环图,所以需要高斯消元搞一搞。

设每个点的期望经过次数是\(g(x)\),那么有

\[g(u) = \sum_{v} \frac{1}{out(v)}*g(v)
\]

特殊的,我们认为点\(1\)有一个一定经过的入边,且不考虑点\(n\)的所有出边。

这个\(g\)很好做啊,我们高斯消元搞一搞就好了。那边的期望经过次数\(f(x)\)也就显而易见。

\[f(x) = \frac{g(u)}{out(u)} + \frac{g(v)}{out(v)}
\]

然后这个题就做完了。

#include <bits/stdc++.h>
using namespace std; const int N = 500 + 5; int n, m, u[N * N], v[N * N], out[N]; vector <int> G[N]; double ans, f[N * N], g[N], mat[N][N]; void gauss_jordan () {
for (int i = 1; i <= n; ++i) {
int besti = i;
for (int j = i; j <= n; ++j) {
if (fabs (mat[besti][i]) < fabs(mat[j][i])) {
besti = j;
}
}
if (i != besti) swap (mat[i], mat[besti]);
for (int j = 1; j <= n; ++j) {
if (i == j) continue;
double t = mat[j][i] / mat[i][i];
for (int k = i; k <= n + 1; ++k) {
mat[j][k] -= mat[i][k] * t;
}
}
}
for (int i = 1; i <= n; ++i) {
g[i] = mat[i][n + 1] / mat[i][i];
}
} int main () {
// freopen ("data.in", "r", stdin);
cin >> n >> m;
for (int i = 1; i <= m; ++i) {
cin >> u[i] >> v[i];
G[u[i]].push_back (v[i]); if (u[i] != n) out[u[i]]++;
G[v[i]].push_back (u[i]); if (v[i] != n) out[v[i]]++;
}
mat[1][n + 1] = 1;
for (int u = 1; u <= n; ++u) {
mat[u][u] = 1;
for (int i = 0; i < G[u].size (); ++i) {
int v = G[u][i];
if (v == n) {
mat[n][v] = -1.0 / out[v];
} else {
mat[u][v] = -1.0 / out[v];
}
}
}
gauss_jordan ();
for (int i = 1; i <= m; ++i) {
if (u[i] != n) f[i] += g[u[i]] / out[u[i]];
if (v[i] != n) f[i] += g[v[i]] / out[v[i]];
}
sort (f + 1, f + 1 + m);
for (int i = 1; i <= m; ++i) {
ans += (m - i + 1) * f[i];
}
cout << fixed << setprecision (3) << ans << endl;
}

【BZOJ3143】【Luogu P3232】 [HNOI2013]游走 概率期望,图论的更多相关文章

  1. BZOJ.3143.[HNOI2013]游走(概率 期望 高斯消元)

    题目链接 参考 远航之曲 把走每条边的概率乘上分配的标号就是它的期望,所以我们肯定是把大的编号分配给走的概率最低的边. 我们只要计算出经过所有点的概率,就可以得出经过一条边(\(u->v\))的 ...

  2. BZOJ 3143 Luogu P3232 [HNOI2013]游走 (DP、高斯消元)

    题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3143 (luogu) https://www.luogu.org/pro ...

  3. [HNOI2013] 游走 - 概率期望,高斯消元,贪心

    假如我们知道了每条边经过的期望次数,则变成了一个显然的贪心.现在考虑如何求期望次数. 由于走到每个点后各向等概率,很显然一条边的期望次数可以与它的两个端点的期望次数,转化为求点的期望次数 考虑每个点对 ...

  4. P3232 [HNOI2013]游走 解题报告

    P3232 [HNOI2013]游走 题目描述 一个无向连通图,顶点从\(1\)编号到\(N\),边从\(1\)编号到\(M\). 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概 ...

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

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

  6. 题解 P3232 [HNOI2013]游走

    洛谷P3232[NOI2013]游走 题目描述 给定一个 n 个点 m 条边的无向连通图,顶点从 1 编号到 n,边从 1 编号到 m. 小 Z 在该图上进行随机游走,初始时小 Z 在 1 号顶点,每 ...

  7. BZOJ 3143: [Hnoi2013]游走 概率与期望+高斯消元

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

  8. [bzoj3143] [洛谷P3232] [HNOI2013] 游走

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

  9. P3232 [HNOI2013]游走——无向连通图&&高斯消元

    题意 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编 ...

随机推荐

  1. Object.assign()的用法 -- 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,返回目标对象

    语法: Object.assign(target, …sources) target: 目标对象,sources: 源对象用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象. ...

  2. app测试自动化操作方法之二

    3.进行APP的滑动操作 方法一:#获取窗口大小def get_size(): size=dr.get_window_size() return size print(get_size())#向上滑动 ...

  3. python计算机二级考试知识点——文件操作

    1. 文件的使用:文件打开.关闭和读写 python通过open函数打开一个文件,并返回一个操作文件的变量,语法形式如下: <变量名>=open(<文件路劲及文件名>,< ...

  4. Python基础知识(程序结构)

    流程控制语句 选择语句.条件表达式.循环语句.跳转语句.pass空语句 程序结构三种基本结构 顺序结构.选择结构.循环结构 顺序结构 按照代码顺序依次运行 选择结构 根据条件表达式结果选择执行不同的语 ...

  5. python 爬虫--下载图片,下载音乐

    #下载图片 imgUrl='http://www.pptbz.com/pptpic/UploadFiles_6909/201211/2012111719294197.jpg' r=requests.g ...

  6. ABC130 Task F. Minimum Bounding Box

    题目链接 题解 最小的 bounding box 一定可以在四个时间段的最左端点和最右端点之间取到. 举例言之,设四个时间段分别是 (2, 5), (7, 10), (4, 9), ( 10, 20) ...

  7. Mysql workbench 字段类型(转载)

    转载自:https://blog.csdn.net/j_h_xie/article/details/52924521 项目初始,在使用workbench建表时,字段中有PK,NN,UQ,BIN,UN, ...

  8. Jenkins的安装配置及使用

    一.以Jenkins在tomcat容器里运行的方式,jenkins的安装及安装时所涉及的JDK和tomcat的配置 1.首先下载tomcat, 2.下载Jenkins.war包,将war包放在tomc ...

  9. shell脚本之nginx启动脚本、统计日志字段、for循环实战、跳板机

    1.NGINX启动脚本 #!/bin/bash # chkconfig: 235 32 62 # description: nginx [ -f /etc/init.d/functions ] &am ...

  10. java实现spark常用算子之filter

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...