首先,题目中的无向简单连通图代表着没有自环,重边...

总分的期望 = 每条边的期望之和...................每条边的期望又可以拆成$u \to v$的期望和$v \to u$的期望

记$f[i]$表示$1 \to n$的路径中,$i$的期望经过次数

而$u \to v$的期望只要知道$f[u], f[v]$就可以求出

注意到,$f[i]$为每个时刻点在$i$的概率之和,即$\sum\limits_{t =0}^{\infty} p^i_t$

那么,我们有$f[i] = \sum\limits_{t = 0}^{\infty} p^i_t = p^i_0 + \sum\limits_{(i, v)} \frac{1}{du[v]} * \sum\limits_{t = 1}^{\infty} p^v_t = p^i_0 + \sum\limits_{(i, v)} \frac{1}{du[v]} * f[v]$

对于$f[1]$,有$p^1_0 = 1$

对于其他点,有$p^i_0 = 0$

列方程即可解决

注意$n$号节点,一旦到了$n$号节点,游走结束

因此,尽管$f[n]$在实际中为$1$,但是在方程中为了保证$n$号点不转移,令$f[n] = 0$

计算边的期望时,$f[n]$同样不参与计算

最后,求出了每条边的期望经过次数,希望总分期望尽量小

当然是经过次数多的边给小编号了,贪心即可!

复杂度$O(n^3)$

注:$500^2 = 250000$,不知道什么时候才会记住

注2:少用$luogu\;ide$调试,莫名少头文件...

#include <cmath>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std; extern inline char gc() {
static char RR[], *S = RR + , *T = RR + ;
if(S == T) fread(RR, , , stdin), S = RR;
return *S ++;
}
inline int read() {
int p = , w = ; char c = gc();
while(c > '' || c < '') { if(c == '-') w = -; c = gc(); }
while(c >= '' && c <= '') p = p * + c - '', c = gc();
return p * w;
} #define de double
#define ri register int
#define sid 505
#define eid 600005 int n, m, cnp, du[sid];
de ex[eid], f[sid][sid], g[sid];
int cap[sid], nxt[eid], node[eid]; inline void adeg(int u, int v) {
du[u] ++;
nxt[++ cnp] = cap[u]; cap[u] = cnp; node[cnp] = v;
} void Guass() {
for(ri i = ; i <= n; i ++) {
int p = i;
for(ri j = i; j <= n; j ++) if(fabs(f[j][i]) > fabs(f[p][i])) p = j;
swap(f[i], f[p]);
for(ri j = i + ; j <= n; j ++) {
de t = f[j][i] / f[i][i];
for(ri k = i; k <= n + ; k ++)
f[j][k] -= t * f[i][k];
}
}
for(ri i = n; i >= ; i --) {
f[i][n + ] = f[i][n + ] / f[i][i];
for(ri j = i - ; j >= ; j --)
f[j][n + ] -= f[i][n + ] * f[j][i];
}
for(ri i = ; i <= n; i ++) g[i] = f[i][n + ];
} int main() {
n = read(); m = read();
for(ri i = ; i <= m; i ++) {
int u = read(), v = read();
adeg(u, v); adeg(v, u);
}
#define cur node[j]
f[][n + ] = ; f[n][n] = ;
for(ri i = ; i < n; i ++) {
f[i][i] = ;
for(ri j = cap[i]; j; j = nxt[j])
f[i][cur] -= 1.0 / (de)(du[cur]);
}
Guass();
int bnp = ;
for(ri i = ; i <= n; i ++)
for(ri j = cap[i]; j; j = nxt[j])
ex[++ bnp] = g[i] / (de)du[i] + g[cur] / (de)du[cur];
sort(ex + , ex + bnp + );
de ans = ;
for(ri i = , j = ; i <= bnp; i += , j ++)
ans += ex[i] * (m - j + );
printf("%.3lf\n", ans);
return ;
}

luoguP3232 [HNOI2013]游走 贪心 + 概率期望 + 高斯消元的更多相关文章

  1. P3232 [HNOI2013]游走——无向连通图&&高斯消元

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

  2. BZOJ.3143.[HNOI2013]游走(概率 期望 高斯消元)

    题目链接 参考 远航之曲 把走每条边的概率乘上分配的标号就是它的期望,所以我们肯定是把大的编号分配给走的概率最低的边. 我们只要计算出经过所有点的概率,就可以得出经过一条边(\(u->v\))的 ...

  3. [HNOI2013] 游走 - 概率期望,高斯消元,贪心

    假如我们知道了每条边经过的期望次数,则变成了一个显然的贪心.现在考虑如何求期望次数. 由于走到每个点后各向等概率,很显然一条边的期望次数可以与它的两个端点的期望次数,转化为求点的期望次数 考虑每个点对 ...

  4. [HNOI2011]XOR和路径 概率期望 高斯消元

    题面 题解:因为异或不太好处理,,,因此按位来算,这样最后的答案就是每一位上的值乘对应的权值再求和.本着期望要倒退的原则,,,我们设$f[i]$表示从$i$到$n$,xor和为1的概率.那么观察$xo ...

  5. luoguP4457 [BJOI2018]治疗之雨 概率期望 + 高斯消元

    应该是最后一道紫色的概率了....然而颜色啥也代表不了.... 首先看懂题意: 你现在有$p$点体力,你的体力上限为$n$ 在一轮中, 1.如果你的体力没有满,你有$\frac{1}{m + 1}$的 ...

  6. 4.23 子串 AC自动机 概率期望 高斯消元

    考虑40分. 设出状态 f[i]表示匹配到了i位还有多少期望长度能停止.可以发现这个状态有环 需要高斯消元. 提供一种比较简单的方法:由于期望的线性可加性 可以设状态f[i]表示由匹配到i到匹配到i+ ...

  7. BZOJ4820 SDOI2017硬币游戏(概率期望+高斯消元+kmp)

    容易想到的做法是建出AC自动机,高斯消元.然而自动机上节点数量是nm的. 注意到我们要求的变量只有n个,考虑将其他不用求的节点合并为一个变量.这个变量即表示随机生成一个串,其不包含任何一个模板串的概率 ...

  8. UVA-10828 (概率期望+高斯消元)

    题意: 给个有向图,每个节点等概率转移到它的后继节点,现在问一些节点的期望访问次数; 思路: 对于一个点v,Ev=Ea/d[a]+Eb/d[b]+Ec/d[c];a,b,c是v的前驱节点; 然后按这个 ...

  9. [BZOJ3143][HNOI2013]游走(期望+高斯消元)

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

随机推荐

  1. 引用类型 ( 对象定义 )——Date 类型

    本文地址:http://www.cnblogs.com/veinyin/p/7607743.html  1 创建日期对象 var date = new Date(); 2 可以给日期对象传值 2.1 ...

  2. marquee滚动效果

    转载两篇文章: http://blog.sina.com.cn/s/blog_49ce67fc0100atb4.html https://baike.1688.com/doc/view-d359560 ...

  3. android 图片旋转 移动 放大缩小

    图片的变化主要是matrix的变化,对matrix不懂的可以先了解下matrxi. public class FunnyView extends View { /* * 手指按下时可能是移动 也可能是 ...

  4. Python学习笔记——数据结构和算法(二)

    1.字典中一个键映射多个值 可以使用collections中的defaultdict来实现,defalultdict接受list或者set为参数 from collections import def ...

  5. Maven整合Spring与Solr

    首先,在maven的pom.xml文件中配置对spring和solrj客户端的依赖: <project xmlns="http://maven.apache.org/POM/4.0.0 ...

  6. 数据分析python应用到的ggplot(二)

    还是优达学院的第七课 数据:https://s3.amazonaws.com/content.udacity-data.com/courses/ud359/hr_by_team_year_sf_la. ...

  7. Java容器---Collection接口中的共有方法

    1.Collection 接口 (1)Collection的超级接口是Iterable (2)Collection常用的子对象有:Map.List.Set.Queue. 右图中实现黑框的ArrayLi ...

  8. 以太坊go-ethereum项目源码本地环境搭建

    如果要深入了解go-ethereum项目的实现与机制,看源代码是必不可少的.今天这篇博客就简单介绍一下如何在本地搭建项目的开发环境. GO语言环境搭建 以win8为例,访问地址https://gola ...

  9. fail2ban安全设置

    1.先安装fail2ban服务包(这里我采用的是fail2ban-0.8.14.tar.gz) 2.解压安装包 cd /data/software tar xzf fail2ban-0.8.14.ta ...

  10. beego学习笔记(3)

    相对复杂一点的示例: package main import "github.com/astaxie/beego" type MainController struct{ beeg ...