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. 十六、Android 滑动效果汇总

    Android 滑动效果入门篇(一)—— ViewFlipper Android 滑动效果入门篇(二)—— Gallery Android 滑动效果基础篇(三)—— Gallery仿图像集浏览 And ...

  2. mac下apache的多站点配置

    以下操作均建立在    已经配置好了php环境 从网上搜索了下,后来自己配置了下还是比较简单的! 我的环境目录是在/Library/webServer/Documents 测试的时候可以直接在这里建立 ...

  3. oracle生成.net的guid方法;

    最近在做一个T1的.NET项目,数据库oracle的时候,遇到一个问题..NET里面的某个数据库表类的某个字段是guid类型.但是用oracle生成的guid.跟.NET的guid 无法识别.导致报错 ...

  4. MIME类型大全

    获取MIME:HttpContext.Current.Request.Files[fileKey].ContentLength MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该 ...

  5. 【ASP.NET】DataContract序列化,反序列化对象中包含用接口声明的属性时的处理方法

    为此对象添加KnownType属性(Attribute).类型为用接口声明的属性(Property)的所有可能类型.  示例如下: public interface IKey { [DataMembe ...

  6. 去掉影响效率的where 1=1

    最近看了篇文章,觉得挺有道理.实际项目中,我们进行sql条件过滤,我们不能确定是不是有条件.也不能确定条件的个数.大多数人会先把sql语句组装为: 这样,如果有其他过滤条件直接加上“and 其他条件” ...

  7. Linux 输入子系统

    Technorati 标签: Kernel 输入子系统 Input      在Linux中,输入设备(如按键.键盘.触摸屏.鼠标等)是典型的字符设备,其一般的工作机理,是底层在按键.触摸时,触发一个 ...

  8. ADO.NET笔记——SQL注入攻击

    相关知识: 可以通过字符串的拼接来构造一个SQL命令字符串,但是SQL命令字符串的拼接确是造成“SQL注入攻击”的重要原因. 考虑下列例子:从ProductCategory表中检索出Name为“Bik ...

  9. IIS目录下文件共享后System.IO.File.Exists返回false

    场景:在iis目录下,因为特殊需要共享一个文件夹,给到其他的技术人员访问,突然发现小小的操作,搞“大”了,使用 string path = Server.MapPath("~/file/te ...

  10. 值类型的Constructor

    使用C#的时候我们最熟悉的是类,也就是Reference Type,翻译成中文是引用类型.但是C#还有另外的一种类型往往被我们用的最多缺经常被忽视,这种类型就是值类型(Value Type). 值类型 ...