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的期望经过次数为f[i],那么就有f[i]=∑f[j]/d[j](j与i之间有边相连,d[j]为点j关联的边数)
因为一开始在点1上,所以f[1]还要加上一个1
又因为到了n点就结束,所以点n不能为其他点提供期望经过次数,设f[n]=0
所以我们可以列出n-1个方程,一共有n-1个变量,可以解出n-1个点的期望经过次数
然后我们可以求出每条边的期望经过次数
对于每一条边(v,u)它的期望经过次数为f[v]/d[i]+f[u]/d[v]
再排个序,根据排序不等式我们知道,倒序才是最小的,倒着标号,然后求和得到最小期望总分
最开始在BZOJ上过了,Wikioi上没过
我以为是精度太高了,把extended改成了double,还是没过
后来下了标程才知道,原来在判断是否为0时用到了精度判断
在BZOJ上不能用精度判断,在wikioi上必须用精度判断
注意细节啊

 const
eps=1e-7;
var
n,m:longint;
d:array[..]of longint;
f:array[..,..]of extended;
v,u:array[..]of longint;
exp:array[..]of extended;
ans:extended; procedure swap(var x,y:extended);
var
t:extended;
begin
t:=x;
x:=y;
y:=t;
end; procedure sort(l,r:longint);
var
i,j:longint;
z:extended;
begin
i:=l;
j:=r;
z:=exp[(l+r)>>];
repeat
while exp[i]>z do
inc(i);
while exp[j]<z do
dec(j);
if i<=j then
begin
swap(exp[i],exp[j]);
inc(i);
dec(j);
end;
until i>j;
if j>l then sort(l,j);
if i<r then sort(i,r);
end; procedure main;
var
i,j,k:longint;
s:extended;
begin
read(n,m);
for i:= to m do
begin
read(v[i],u[i]);
inc(d[v[i]]);
inc(d[u[i]]);
end;
for i:= to n- do
f[i,i]:=-;
for i:= to m do
begin
f[v[i],u[i]]:=f[v[i],u[i]]+/d[u[i]];
f[u[i],v[i]]:=f[u[i],v[i]]+/d[v[i]];
end;
f[,n]:=-;
for i:= to n- do
f[i,n]:=;
for i:= to n- do
begin
for j:=i to n- do
if f[j,i]<> then break;
for k:=i to n do
swap(f[i,k],f[j,k]);
for j:=i+ to n- do
if abs(f[j,i])-eps> then
begin
s:=f[j,i]/f[i,i];
f[j,i]:=;
for k:=i+ to n do
f[j,k]:=f[j,k]-s*f[i,k];
end;
end;
for i:=n- downto do
begin
for j:=i+ to n- do
f[i,n]:=f[i,n]-f[j,]*f[i,j];
f[i,]:=f[i,n]/f[i,i];
end;
for i:= to m do
begin
exp[i]:=exp[i]+f[v[i],]/d[v[i]];
exp[i]:=exp[i]+f[u[i],]/d[u[i]];
end;
sort(,m);
for i:= to m do
ans:=ans+i*exp[i];
write(ans::);
end; begin
main;
end.

3143: [Hnoi2013]游走 - BZOJ的更多相关文章

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

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

  2. bzoj 3143 [Hnoi2013]游走 期望dp+高斯消元

    [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3394  Solved: 1493[Submit][Status][Disc ...

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

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

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

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

  5. bzoj 3143: [Hnoi2013]游走

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

  6. BZOJ 3143: [Hnoi2013]游走 概率与期望+高斯消元

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

  7. bzoj 3143 [Hnoi2013]游走(贪心,高斯消元,期望方程)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3143 [题意] 给定一个无向图,从1走到n,走过一条边得到的分数为边的标号,问一个边的 ...

  8. 【BZOJ】3143: [Hnoi2013]游走

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3143 显然如果一条边期望被走过的次数越多,我们就应该给它的编号越小. 所以问题变为如何求每 ...

  9. [BZOJ 3143][HNOI2013]游走(数学期望)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3143 分析: 易得如果知道了每条边经过的数学期望,那就可以贪心着按每条边的期望的大小赋 ...

随机推荐

  1. xcode5下cocos2dx横竖屏设置

    我们在开发一款游戏之前一定会考虑的一件事就是,我们的游戏是支持横屏还是竖屏,又或者是横竖屏都支持.那么如何在xcode中对项目进行设置呢?下面我就在xcode5.1.1中利用cocos2dx2.2.3 ...

  2. 【学习笔记】【C语言】类型说明符

    1. short和long 1> short和long可以提供不同长度的整型数,也就是可以改变整型数的取值范围.在64bit编译器环境下,int占用4个字节(32bit),取值范围是-231~2 ...

  3. 时间类型(DataTime)赋空值

    暂时只发现这一个方法 如果直接Datetime time=DBNull.Value;会报null与DataTime没有隐式转换 SqlCommand cmd = SqlCommand(conn); / ...

  4. Angular2中的metadata(元数据)

    @Attrubute() 从host element 中获得普通(不是@Input)属性对应的值 适用于组件嵌套或指令, 从父组件向子组件传递数据 app.component.ts import {C ...

  5. ThinkPHP中的内置标签

    ThinkPHP中的内置标签 1.内置标签分类 闭合标签 <tag></tag> 开放标签 <tag /> 2.包含文件标签 主要功能:实现对文件的包含(类似于re ...

  6. 济南学习 Day 2 T3 pm

    它[问题描述]N个人坐成一圈,其中第K个人拿着一个球.每次每个人会以一定的概率向左边的人和右边的人传球.当所有人都拿到过球之后,最后一个拿到球的人即为胜者.求第N个人获胜的概率. (所有人按照编号逆时 ...

  7. Java RMI 远程方法调用

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  8. C# 汉字转拼音(转)

    (一)将汉字转化成全拼代码: private void button1_Click(object sender, EventArgs e) { this.textBox2.Text = Hz2Py.C ...

  9. nginx自启动脚本

    #!/bin/bash # #Startup script for Nginx - this script starts and stops the nginx daemon # # chkconfi ...

  10. PHP获取时间日期的多种方法

    分享下PHP获取时间日期的多种方法. <?php echo "今天:".date("Y-m-d")."<br>";     ...