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位小数。

每个点i走到的期望次数x[i]=(i==1?1:0)+sigma(x[j]/o[j]) (j!=n , i到j有边)
o[j]为j的度
高斯消元解出每个x[i]
边(a,b)走过的期望次数为(a==n?0:x[a]/o[a])+(b==n?0:x[b]/o[b])
按边走过的次数从大到小排序并顺序编号
#include<cstdio>
#include<vector>
#include<algorithm>
int n,m,a,b;
std::vector<int>es[];
double xs[][],ys[],x[],ans=;
int o[];
inline bool is0(double x){return x<1.0e-10&&x>-1.0e-10;}
inline bool isn0(double x){return x>=1.0e-10||x<=-1.0e-10;}
struct edge{
int a,b;
double v;
}e[];
int ep=;
bool operator<(edge a,edge b){
return a.v>b.v;
}
int main(){
scanf("%d%d",&n,&m);
while(m--){
scanf("%d%d",&a,&b);
es[a].push_back(b);
es[b].push_back(a);
o[a]++;o[b]++;
e[ep].a=a;e[ep++].b=b;
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)xs[i][j]=;
xs[i][i]=-;
for(int j=;j<es[i].size();j++){
int u=es[i][j];
if(u!=n)xs[i][u]+=1.0/o[u];
}
ys[i]=;
}
ys[]=-;
for(int t=;t<=n;t++){
if(is0(xs[t][t]))
for(int i=t+;i<=n;i++){
if(isn0(xs[i][t])){
for(int j=t;j<=n;j++){double v=xs[i][j];xs[i][j]=xs[t][j];xs[t][j]=v;}
double v=ys[i];ys[i]=ys[t];ys[t]=v;
}
}
double c=1.0/xs[t][t];
for(int i=t;i<=n;i++)xs[t][i]*=c;
ys[t]*=c;
for(int i=t+;i<=n;i++){
if(isn0(xs[i][t])){
double k=xs[i][t];
for(int j=t;j<=n;j++){
xs[i][j]-=xs[t][j]*k;
}
ys[i]-=ys[t]*k;
}
}
}
for(int t=n;t;t--){
for(int i=t+;i<=n;i++){
ys[t]-=xs[t][i]*x[i];
}
x[t]=ys[t];
}
for(int i=;i<ep;i++){
e[i].v=;
if(e[i].a!=n)e[i].v+=x[e[i].a]/o[e[i].a];
if(e[i].b!=n)e[i].v+=x[e[i].b]/o[e[i].b];
}
std::sort(e,e+ep);
for(int i=;i<ep;i++)ans+=e[i].v*(i+);
printf("%.3lf\n",ans);
return ;
}

bzoj3143 游走的更多相关文章

  1. 【Hnoi2013】Bzoj3143 游走

    Position: http://www.lydsy.com/JudgeOnline/problem.php?id=3143 List Bzoj3143 Hnoi2013 游走 List Descri ...

  2. [HNOI2013][BZOJ3143] 游走 - 高斯消元

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

  3. bzoj3143 游走 期望dp+高斯消元

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

  4. bzoj3143游走

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3143 学到了无向图中点被经过的期望次数和边被经过的期望次数. 一个点被经过的期望次数  就是 ...

  5. bzoj3143游走——期望+高斯消元

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3143 只需算出每条边被经过的概率,将概率从小到大排序,从大到小编号,就可得到最小期望: 每条 ...

  6. 【BZOJ3143】游走(高斯消元,数学期望)

    [BZOJ3143]游走(高斯消元,数学期望) 题面 BZOJ 题解 首先,概率不会直接算... 所以来一个逼近法算概率 这样就可以求出每一条边的概率 随着走的步数的增多,答案越接近 (我卡到\(50 ...

  7. 【BZOJ3143】[Hnoi2013]游走 期望DP+高斯消元

    [BZOJ3143][Hnoi2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 ...

  8. 【BZOJ3143】【HNOI2013】游走 && 【BZOJ3270】博物馆 【高斯消元+概率期望】

    刚学完 高斯消元,我们来做几道题吧! T1:[BZOJ3143][HNOI2013]游走 Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小 ...

  9. 【BZOJ-3143】游走 高斯消元 + 概率期望

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

随机推荐

  1. flashfxp 命令行

    以后更新软件时,尽量用bat命令行 http://www.flashfxp.com/forum/flashfxp/frequently-asked-questions-faq-/14748-comma ...

  2. linux上定时运行scrapy

    1 运行方式一 (proxy-ip) [root@192 ~]# cd /data/test-proxy-ip/ (proxy-ip) [root@192 test-proxy-ip]# scrapy ...

  3. 基于GUI的简单聊天室03

    上一版本,客户端关闭后会出现“socket close”异常问题,这个版本用捕捉异常来解决,实际上只是把异常输出的语句改为用户退出之类,并没真正解决 服务器类 package Chat03; /** ...

  4. SharePoint Word Service-PowerShell

    1. 配置转换进程 Set-SPWordConversionServiceApplication –Identity "Word Automation Services" –Act ...

  5. UIActivityIndicatorView使用

    UIActivityIndicatorView显示一个标准的旋转进度轮,类似网页AJAX加载时的图标. let loadIndicator = UIActivityIndicatorView(fram ...

  6. HslControls组件库 工业控件库 曲线控件 时间控件 管道控件 温度计控件 阀门控件 传送带控件 进度条控件 电池控件 数码管控件等等

    本篇博客主要对 HslControls 组件做一个大概的总览介绍,更详细的内容可以参照页面里的子链接,还有github上的源代码,然后进行相关的学习,和使用. Prepare 先从nuget下载到组件 ...

  7. Maven学习- 使用Maven构建Web项目

    从网上查了一些资料,才算明白(也就是怎么操作吧),怎么使用Maven构建一个Web项目,找到一篇文档,主要都是从这里学到的: 下载地址:使用Eclipse构建Maven的Web项目.docx 现自己在 ...

  8. iOS-----使用CFNetwork实现TCP协议的通信

    使用CFNetwork实现TCP协议的通信 TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个通信接口,从而在通信的两端之间形成网络虚拟链路.一旦建立了虚拟的网络链路,两端的程序就可以 ...

  9. Linux环境下 多线程下载 (Python 实现版)

    本文是多年前学习编程时参照一个网友程序的基础之上改写的, 采用Python语音编写, 多线程下载功能, 可以有效提高Linux下原有下载工具中的一些不足,以下给出具体代码. #!/usr/bin/py ...

  10. 判断颜色信息-RGB2HSV(opencv)

    前言 项目车号识别过程中,车体有三种颜色黑车黑底白字.红车红底白字.绿车黄底绿字,可以通过判断车体的颜色信息,从而判断二值化是否需要反转,主要是基于rgb2hsv函数进行不同颜色的阈值判断. matl ...