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

3 3
2 3
1 2
1 3

Sample Output

3.333

HINT

边(1,2)编号为1,边(1,3)编号2,边(2,3)编号为3。
/*
设点i的出度为d[i],期望经过的次数为x[i],边i的期望经过的次数为f[i]。
那么可以得到以下式子:
x[i]=Σx[j]/d[j] (j->i)
f[i]=Σx[u]/d[u]+x[v]/d[v]
特别的:x[1]=1+x[j]/d[j] (j->1)
x[n]=1
然后高斯消元解出方程,让经过次数多的边拥有小的编号。
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define N 510
#define M 250010
#define ld long double
using namespace std;
int u[M],v[M],d[N],n,m;
ld a[N][N],x[N],f[M];
void gauss(){
for(int i=;i<=n;i++){
int id=i;ld maxn=fabs(a[i][i]);
for(int j=i+;j<=n;j++) if(fabs(a[j][i])>maxn) id=j,maxn=fabs(a[j][i]);
if(id!=i) swap(a[id],a[i]);
ld t=1.0/a[i][i];
for(int j=;j<=n+;j++) a[i][j]*=t;
for(int j=;j<=n;j++){
if(j==i) continue;
ld t=a[j][i];
for(int k=i;k<=n+;k++)
a[j][k]-=t*a[i][k];
}
}
for(int i=n;i;i--){
ld tmp=;
for(int j=i+;j<=n;j++)
tmp+=x[j]*a[i][j];
x[i]=a[i][n+]-tmp;
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
scanf("%d%d",&u[i],&v[i]);
d[u[i]]++;d[v[i]]++; }
for(int i=;i<=n;i++) a[i][i]=-;
for(int i=;i<=m;i++){
if(v[i]!=n) a[u[i]][v[i]]+=1.0/d[v[i]];
if(u[i]!=n) a[v[i]][u[i]]+=1.0/d[u[i]];
}
for(int i=;i<n;i++) a[n][i]=;
for(int i=;i<=n;i++){
if(i==||i==n) a[i][n+]=-;
else a[i][n+]=;
}
gauss();
for(int i=;i<=m;i++){
if(u[i]!=n) f[i]+=x[u[i]]/d[u[i]];
if(v[i]!=n) f[i]+=x[v[i]]/d[v[i]];
}
sort(f+,f+m+);
ld ans=;
for(int i=;i<=m;i++)
ans+=f[i]*(m-i+);
printf("%.3lf",(double)ans);
return ;
}

游走(bzoj 3143)的更多相关文章

  1. 游走 bzoj 3143

    游走(2s 128MB)walk [问题描述] [输入格式] [输出格式] [样例输入] 3 3 2 3 1 2 1 3 [样例输出] 3.333 [样例说明] 题解: 主要算法:贪心:高斯消元: 题 ...

  2. 3143: [Hnoi2013]游走 - BZOJ

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

  3. BZOJ 3143 HNOI2013 游走 高斯消元 期望

    这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...

  4. BZOJ 3143 游走 | 数学期望 高斯消元

    啊 我永远喜欢期望题 BZOJ 3143 游走 题意 有一个n个点m条边的无向联通图,每条边按1~m编号,从1号点出发,每次随机选择与当前点相连的一条边,走到这条边的另一个端点,一旦走到n号节点就停下 ...

  5. 【BZOJ】【3143】【HNOI2013】游走

    数学期望/高斯消元/贪心 啊……用贪心的思路明显是要把经过次数期望越大的边的权值定的越小,那么接下来的任务就是求每条边的期望经过次数. 拆边为点?nonono,连接x,y两点的边的期望经过次数明显是 ...

  6. BZOJ 3143 游走(高斯消元)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3143 题意:一个无向连通图,顶点从1编号到n,边从1编号到m.小Z在该图上进行随机游走, ...

  7. bzoj 3143: [Hnoi2013]游走 高斯消元

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1026  Solved: 448[Submit][Status] ...

  8. BZOJ 3143: [Hnoi2013]游走 [概率DP 高斯消元]

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

  9. bzoj 3143 随机游走

    题意: 给一个简单无向图,一个人从1号节点开始随机游走(即以相同概率走向与它相邻的点),走到n便停止,问每条边期望走的步数. 首先求出每个点期望走到的次数,每条边自然是从它的两个端点走来. /**** ...

  10. bzoj 3143: [Hnoi2013]游走

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

随机推荐

  1. C#扩展方法学习

    扩展方法的本质是什么,详细见此文 C#扩展方法,爱你在心口难开 重点如下:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.扩展方法是一种特殊的静态方法 ...

  2. Nexus3.0搭建私服上传JAR包 Windows10

    背景 近期换了一个项目组,用的是公司自研产品,涉及到很多内部JAR包引用,版本号很多,每次更新都是产品部给出jar包,项目组成员各自复制一套本地替换,来了新人各种安装配置,复杂度太高,这不,我一来,又 ...

  3. Program received signal SIGILL, Illegal instruction

    Program received signal SIGILL, Illegal instruction 这个错误,发现是直接在printf 的%s中直接使用string类型,而没有使用c字符串格式造成 ...

  4. Katalon Studio(二) 进阶战の Jenkins集成 analytics.katalon 集成

    本教程只针对Katalon Studio 与CI工具之一Jenkins的集成与脚本集的测试报告可视化简单操作. 1.新建一个job 2.新建一个自由风格的job 3.构建触发器 4.构建Windows ...

  5. inux 软件编译、安装、删除

    640?wx_fmt=otherimage.png 本文学习内容 手动安装软件 手动安装下载源码的软件 源码编译3步骤 deb包-包依赖管理 dekg -l 查看所以安装deb的包 apt-get仓库 ...

  6. 两个自动配置IPv4

    今天一早过来发现网络连接不上了,ipconfig一下后,发现ip并不是我固定配置的ip地址,而是变成了一个完全不一样的ip,点击本地连接,点击详细信息,发现有两个自动配置IPv4,原因可能是ip地址冲 ...

  7. Js 之图片懒加载插件

    一.PC端(lazyload) 1.引入js文件 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.m ...

  8. element-ui iview-admin 都是基于vue的ui框架

    element-ui iview-admin 都是基于vue的ui框架

  9. vue相关技术

    vuejs2.0:渐进式JavaScript框架,易用.灵活.高效,似乎任何规模的应用都适用. element:基于vuejs2.0的ui组件库. vue-router:一般单页面应用spa都要用到的 ...

  10. flatpickr插件的使用

    flatpickr功能强大的日期时间选择器插件 日期格式化 <input class=flatpickr data-date-format="d-m-Y"> <i ...