游走 bzoj 3143
游走
【问题描述】

【输入格式】

【输出格式】

【样例输入】
3 3
2 3
1 2
1 3
【样例输出】
3.333
【样例说明】

题解:
题意是给一个简单无向连通图,给每条边赋上权值,使期望值最小
贪心让被走到概率大的边的权值小,就可得到最小的期望值
设每个点被走到的概率为p, 出度为d
那么p[i] = Σ p[j] / d[j] (i,j 之间有连边) (从 j 出发选到 i 与 j 连边的概率为 1 / d[j])
移项得 Σ p[j] / d[j] - p[i] = 0
对于每个点我们都可以列出一个含有n个未知数的方程
特别地,p[1]概率需要加一 , p[n] = 1 (起点为1,终点为n)
那么就可以进行高斯消元啦
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
inline void Scan(int &x)
{
char c;
while((c = getchar()) < '' || c > '');
x = c - '';
while((c = getchar()) >= '' && c <= '') x = (x << ) + (x << ) + c - '';
}
double eps = 1e-;
int n, m;
double c[];
double a[][];
int x[], y[];
int de[];
double ans;
inline void Solve()
{
int now;
double t;
for(int i = ; i <= n; ++i)
{
now = i;
while(fabs(a[i][now]) <= eps && now <= n) ++now;
if(now > n) continue;
for(int j = ; j <= n + ; ++j) swap(a[i][j], a[now][j]);
t = a[i][i];
for(int j = ; j <= n + ; ++j) a[i][j] /= t;
for(int j = ; j <= n; ++j)
if(i != j)
{
t = a[j][i];
for(int k = ; k <= n + ; ++k)
a[j][k] -= a[i][k] * t;
}
}
}
int main()
{
Scan(n), Scan(m);
for(int i = ; i <= m; ++i)
{
Scan(x[i]), Scan(y[i]);
++de[x[i]], ++de[y[i]];
}
for(int i = ; i <= m; ++i)
{
a[x[i]][y[i]] += 1.0 / (double) de[y[i]];
a[y[i]][x[i]] += 1.0 / (double) de[x[i]];
}
for(int i = ; i <= n + ; ++i) a[n][i] = ;
for(int i = ; i <= n; ++i) a[i][i] = -;
a[][n + ] = -;
Solve();
for(int i = ; i <= m; ++i)
c[i] = a[x[i]][n + ] / (double) de[x[i]] + a[y[i]][n + ] / (double) de[y[i]];
sort(c + , c + + m);
for(int i = ; i <= m; ++i)
ans += c[i] * (m - i + );
printf("%.3lf", ans);
}
游走 bzoj 3143的更多相关文章
- 3143: [Hnoi2013]游走 - BZOJ
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- BZOJ 3143 游走 | 数学期望 高斯消元
啊 我永远喜欢期望题 BZOJ 3143 游走 题意 有一个n个点m条边的无向联通图,每条边按1~m编号,从1号点出发,每次随机选择与当前点相连的一条边,走到这条边的另一个端点,一旦走到n号节点就停下 ...
- 【BZOJ】【3143】【HNOI2013】游走
数学期望/高斯消元/贪心 啊……用贪心的思路明显是要把经过次数期望越大的边的权值定的越小,那么接下来的任务就是求每条边的期望经过次数. 拆边为点?nonono,连接x,y两点的边的期望经过次数明显是 ...
- BZOJ 3143 游走(高斯消元)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3143 题意:一个无向连通图,顶点从1编号到n,边从1编号到m.小Z在该图上进行随机游走, ...
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- BZOJ 3143: [Hnoi2013]游走 [概率DP 高斯消元]
一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分 ...
- bzoj 3143 随机游走
题意: 给一个简单无向图,一个人从1号节点开始随机游走(即以相同概率走向与它相邻的点),走到n便停止,问每条边期望走的步数. 首先求出每个点期望走到的次数,每条边自然是从它的两个端点走来. /**** ...
- bzoj 3143: [Hnoi2013]游走
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
随机推荐
- javascript动画系列第三篇——碰撞检测
前面的话 前面分别介绍了拖拽模拟和磁性吸附,当可视区域内存在多个可拖拽元素,就出现碰撞检测的问题,这也是javascript动画的一个经典问题.本篇将详细介绍碰撞检测 原理介绍 碰撞检测的方法有很多, ...
- .NET Core采用的全新配置系统[9]: 为什么针对XML的支持不够好?如何改进?
物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- 关于 devbridge-autocomplete 插件多选操作的实现方法
目前据我所知最好用的 autocomplete 插件就是 jquery-ui 的 autocomplete 以及 devbridge 的 autocomplete 插件. 我最终选择了 devbrid ...
- 带你实现开发者头条APP(三) 首页实现
title: 带你实现开发者头条APP(三) 首页实现 tags: 轮播广告,ViewPager切换,圆形图片 grammar_cjkRuby: true --- 一.前言 今天实现开发者头条APP的 ...
- 苹果强制使用HTTPS传输了怎么办?——关于HTTPS,APP开发者必须知道的事
WeTest 导读 2017年1月1日起,苹果公司将强制使用HTTPS协议传输.本文通过对HTTPS基础原理和通信过程内容的讲解,介绍APP开发者在这个背景下的应对办法. 几周前,我们在<htt ...
- pt-online-schema-change中update触发器的bug
pt-online-schema-change在对表进行表结构变更时,会创建三个触发器. 如下文测试案例中的t2表,表结构如下: mysql> show create table t2\G . ...
- Tesseract-OCR字符识别简介
OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程.Tesseract:开源的OCR识别引擎,初期Tesseract引擎 ...
- JS继承之借用构造函数继承和组合继承
根据少一点套路,多一点真诚这个原则,继续学习. 借用构造函数继承 在解决原型中包含引用类型值所带来问题的过程中,开发人员开始使用一种叫做借用构造函数(constructor stealing)的技术( ...
- Spring配置文件标签报错:The prefix "XXX" for element "XXX:XXX" is not bound. .
例如:The prefix "context" for element "context:annotation-config" is not bound. 这种 ...
- Mysql 忘记root密码处理办法
一.更改my.cnf配置文件 1.用命令编辑/etc/my.cnf配置文件,即:vim /etc/my.cnf 或者 vi /etc/my.cnf 2.在[mysqld]下添加skip-grant-t ...