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. Part 8 AngularJS filters

    Filters in angular can do 3 different things 1. Format data 2. Sort data 3. Filter data Filters can ...

  2. C# HttpWebRequest类

    HttpWebRequest类与HttpRequest类的区别. HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所有信息.而HttpWebReque ...

  3. java开发命名规范(转载)

    java开发命名规范 使用前注意事项: 1.  由于Java面向对象编程的特性, 在命名时应尽量选择名词 2.  驼峰命名法(Camel-Case): 当变量名或函式名是由一个或多个单字连结在一起,而 ...

  4. windowsphone 瀑布流&ui虚拟化

    瀑布流已经有点年代了吧,不过wp上还真是挺少资料的.今天抽空把自己之前搞过的东西写出来,避免大家重复劳动. 一.简单的瀑布流排版加入ui虚拟化. 最近看了 段博琼  ui虚拟化的一篇博文,链接:htt ...

  5. Windows Phone 8仿Toast弹出通知。

    Wp8后台收到消息可以弹出Toast通知,可是应用在前台跑的时候却好像没有办法弹出Toast通知.而需求上有要求要弹出Toast通知,在这种情况下,就开始考虑是否能够做一个类似Toast的弹出通知呢? ...

  6. [转]高并发访问下避免对象缓存失效引发Dogpile效应

    避免Redis/Memcached缓存失效引发Dogpile效应 Redis/Memcached高并发访问下的缓存失效时可能产生Dogpile效应(Cache Stampede效应). 推荐阅读:高并 ...

  7. Ubuntu14.04 开启MySQL的remote access

    一旦开启MySQL的remote access, 即可实现在windows系统下连接ubuntu下的mysql 步骤如下: sudo vim /etc/mysql/my.cnf bind-addres ...

  8. Java Web动态配置log4j

    导入log4j的jar包, 在web.xml中做如下配置 <!-- Log4j Configuration --> <context-param> <param-name ...

  9. SignalR 2.0 系列: 开始使用SignalR 2.0

    这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第四篇:开始使用SignalR 2.0 原文:Getting S ...

  10. 基础学习总结(八)--HttpClient

    在Android开发中,Android SDK附带了Apache的HttpClient,它是一个完善的客户端.它提供了对HTTP协议的全面支持,可以使用HttpClient的对象来执行HTTP GET ...