BZOJ3143:[HNOI2013]游走(高斯消元)
Description
一个无向连通图,顶点从1编号到N,边从1编号到M。
小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z 到达N号顶点时游走结束,总分为所有获得的分数之和。
现在,请你对这M条边进行编号,使得小Z获得的总分的期望值最小。
Input
第一行是正整数N和M,分别表示该图的顶点数 和边数,接下来M行每行是整数u,v(1≤u,v≤N),表示顶点u与顶点v之间存在一条边。 输入保证30%的数据满足N≤10,100%的数据满足2≤N≤500且是一个无向简单连通图。
Output
仅包含一个实数,表示最小的期望值,保留3位小数。
Sample Input
2 3
1 2
1 3
Sample Output
HINT
边(1,2)编号为1,边(1,3)编号2,边(2,3)编号为3。
Solution

Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define N (500+10)
using namespace std; int Ind[N],head[N],num_edge;
int n,m,u,v,h,dis[N][N];
double ans[N],f[N][N],q[N*N]; void Gauss()
{
for (int i=; i<=n; ++i)
{
int num=i;
for (int j=i+; j<=n; ++j)
if (fabs(f[j][i])>fabs(f[num][i])) num=j;
if (num!=i) swap(f[i],f[num]);
for (int j=i+; j<=n; ++j)
{
double t=f[j][i]/f[i][i];
for (int k=i; k<=n+; ++k)
f[j][k]-=t*f[i][k];
}
}
for (int i=n; i>=; --i)
{
for (int j=i+; j<=n; ++j)
f[i][n+]-=f[i][j]*ans[j];
ans[i]=f[i][n+]/f[i][i];
}
} int main()
{
scanf("%d%d",&n,&m);
for (int i=; i<=m; ++i)
{
scanf("%d%d",&u,&v);
dis[u][v]=dis[v][u]=;
Ind[u]++; Ind[v]++;
}
for (int i=; i<=n; ++i)
{
f[i][i]=-;
for (int j=; j<=n; ++j)
if (dis[i][j]) f[i][j]=(double)/Ind[j];
}
f[][n+]=-;
for (int i=; i<n; ++i) f[n][i]=;
Gauss();
for (int i=; i<=n; ++i)
for (int j=i+; j<=n; ++j)
if (dis[i][j])
q[++h]=ans[i]/Ind[i]+ans[j]/Ind[j];
sort(q+,q+h+);
double Ans=;
for (int i=; i<=m; ++i)
Ans+=i*q[m-i+];
printf("%.3lf\n",Ans);
}
BZOJ3143:[HNOI2013]游走(高斯消元)的更多相关文章
- 【BZOJ-3143】游走 高斯消元 + 概率期望
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2264 Solved: 987[Submit][Status] ...
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- Luogu3232 HNOI2013 游走 高斯消元、期望、贪心
传送门 这种无向图上从一个点乱走到另一个点的期望题目好几道与高斯消元有关 首先一个显然的贪心:期望经过次数越多,分配到的权值就要越小. 设$du_i$表示$i$的度,$f_i$表示点$i$的期望经过次 ...
- [HNOI2013][BZOJ3143] 游走 - 高斯消元
题目描述 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边 ...
- 【BZOJ3143】【HNOI2013】游走 高斯消元
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3143 我们令$P_i$表示从第i号点出发的期望次数.则$P_n$显然为$0$. 对于$P ...
- 【xsy1201】 随机游走 高斯消元
题目大意:你有一个$n*m$的网格(有边界),你从$(1,1)$开始随机游走,求走到$(n,m)$的期望步数. 数据范围:$n≤10$,$m≤1000$. 我们令 $f[i][j]$表示从$(1,1) ...
- [BZOJ3143][HNOI2013]游走(期望+高斯消元)
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3576 Solved: 1608[Submit][Status ...
- BZOJ3143 [Hnoi2013]游走 【高斯消元】
题目 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编 ...
随机推荐
- bzoj 2164: 采矿
Description 浩浩荡荡的cg大军发现了一座矿产资源极其丰富的城市,他们打算在这座城市实施新的采矿战略.这个城市可以看成一棵有n个节点的有根树,我们把每个节点用1到n的整数编号.为了方便起见, ...
- String.Compare 方法 (String, Int32, String, Int32, Int32)
String.Compare 方法 (String, Int32, String, Int32, Int32) 对两个指定的 String 对象的子字符串进行比较,并返回一个指示二者在排序顺序中的相对 ...
- sublime text 3支持GBK编码
1.安装Package Control: 按Ctrl+~打开命令行,然后复制粘贴下面这一行代码,回车确定: import urllib.request,os; pf = 'Package Contro ...
- 十一、cent OS下搭建SVN服务器
安装SVN命令:yum install subversion 查看安装位置:rpm -ql subversion,我们看到它在/usr/bin目录下生成了svn的二进制文件 查看svn版本:/usr/ ...
- form表单在发送到服务器时候编码方式
enctype(编码方式):规定了form表单在发送到服务器时候编码方式.有如下的三个值可选: 1.application/x-www-form-urlencoded.默认的编码方式.但是在用文本的传 ...
- Algorithm——两数之和
题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中 ...
- IO流之打印流
打印流的概述(只有输出就是只与数据目的有关,不会抛出IO异常) 打印流添加输出数据的功能,使它们能够方便地打印各种数据值表示形式. 打印流根据流的分类: l 字节打印流 PrintStream l ...
- 原生js、jQuery实现选项卡功能
在大家在网上平常浏览网页的时候,想必各位都会看到选项卡功能,在这里给大家详解一下用原生js.jQuery如何来写一些基本的选项卡 话不多说,先给各位看一下功能图: 好了,下边 ...
- 如何解决git fatal: refusing to merge unrelated histories
我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传. 先pull,因为两个仓库不同,发现refusing to merge unrelated histories,无法p ...
- 申请单位iOS开发者账号
没有AppleID的需要先申请:此处略过: 1.登录苹果开发者官网(https://developer.apple.com),网速比较慢,多试几次 2. 点击 Enroll 切换到 简体中文 我以下述 ...