【BZOJ3143】【Luogu P3232】 [HNOI2013]游走 概率期望,图论
期望\(DP\)入门题目。
关键思想:无向边的转移作为有向边考虑。其他的就是直接上全期望公式。由于这个题目不是有向无环图,所以需要高斯消元搞一搞。
设每个点的期望经过次数是\(g(x)\),那么有
\]
特殊的,我们认为点\(1\)有一个一定经过的入边,且不考虑点\(n\)的所有出边。
这个\(g\)很好做啊,我们高斯消元搞一搞就好了。那边的期望经过次数\(f(x)\)也就显而易见。
\]
然后这个题就做完了。
#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]游走 概率期望,图论的更多相关文章
- BZOJ.3143.[HNOI2013]游走(概率 期望 高斯消元)
题目链接 参考 远航之曲 把走每条边的概率乘上分配的标号就是它的期望,所以我们肯定是把大的编号分配给走的概率最低的边. 我们只要计算出经过所有点的概率,就可以得出经过一条边(\(u->v\))的 ...
- BZOJ 3143 Luogu P3232 [HNOI2013]游走 (DP、高斯消元)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3143 (luogu) https://www.luogu.org/pro ...
- [HNOI2013] 游走 - 概率期望,高斯消元,贪心
假如我们知道了每条边经过的期望次数,则变成了一个显然的贪心.现在考虑如何求期望次数. 由于走到每个点后各向等概率,很显然一条边的期望次数可以与它的两个端点的期望次数,转化为求点的期望次数 考虑每个点对 ...
- P3232 [HNOI2013]游走 解题报告
P3232 [HNOI2013]游走 题目描述 一个无向连通图,顶点从\(1\)编号到\(N\),边从\(1\)编号到\(M\). 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概 ...
- BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元
BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...
- 题解 P3232 [HNOI2013]游走
洛谷P3232[NOI2013]游走 题目描述 给定一个 n 个点 m 条边的无向连通图,顶点从 1 编号到 n,边从 1 编号到 m. 小 Z 在该图上进行随机游走,初始时小 Z 在 1 号顶点,每 ...
- BZOJ 3143: [Hnoi2013]游走 概率与期望+高斯消元
Description 一个无向连通图,顶点从1编号到N,边从1编号到M.小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获 ...
- [bzoj3143] [洛谷P3232] [HNOI2013] 游走
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- P3232 [HNOI2013]游走——无向连通图&&高斯消元
题意 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编 ...
随机推荐
- CentOS 安装jdk 1.8
方法一:手动解压JDK的压缩包,然后设置环境变量 1.在/usr/目录下创建java目录 [root@localhost ~]# mkdir/usr/java [root@localhost ~ ...
- pthon基础知识(索引、切片、序列相加、乘法、检查元素是否是序列成员、计算序列长度、最大最小值)
序列 数据存储方式 数据结构 python 列表.元组.字典.集合.字符串 序列: 一块用于存放多个值的连续内存空间,并且按一定顺序排列,可以通过索引取值 索引(编号): 索引可以是负数 从左到 ...
- PTA(Basic Level)1038.统计同成绩学生
本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即学生总人数.随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔 ...
- Shell初学(八)linux下的ACL
[1]ACL的作用 简单直接解释一下ACL的作用,即把权限的个别化额外添加. 可以解决如下问题~~比如: [1.1]基于用户: 我有10个用户a1-a10,我有一个文件夹/tmp/test,我想给a1 ...
- oracle数据段详解
Tablespace(表空间):表空间是数据库的逻辑划分,一个表空间只能属于一个数据库.所有的数据库对象都放在指定的表空间中,但主要存放的对象是表,所以称为表空间. 默认的系统表空间:system.s ...
- python多线程学习(一)
python多线程.多进程 初探 原先刚学Java的时候,多线程也学了几天,后来一直没用到.然后接触python的多线程的时候,貌似看到一句"python多线程很鸡肋",于是乎直接 ...
- 如何用纯 CSS 绘制一个世界上不存在的彭罗斯三角形
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/RyvgMZ 可交互视频教 ...
- PageObject 页面对象模式
一.PageObject 页面对象设计模式 (一个页面建一个类,即对象,页面对象) 每个页面都建对应的class,类中包含了页面的输入框.标题.元素等元素,测试代码中测试这个页面时,只需要调用这个页 ...
- mongoose操作笔记
一.mongoose文档地址: https://cn.mongoosedoc.top/docs/api.html#update_update https://www.cnblogs.com/web-f ...
- cut--修剪小能手
cut命令 cut原理:以每一行位一个处理对象. 参数选项 解释说明 -b 以字节为单位进行分割 -c 以字符为单位进行分割(对切割中文有奇效) -d 自定义分隔符号,默认以tab为分隔符 1:-b ...