luoguP3232 [HNOI2013]游走 贪心 + 概率期望 + 高斯消元
首先,题目中的无向简单连通图代表着没有自环,重边...
总分的期望 = 每条边的期望之和...................每条边的期望又可以拆成$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]游走 贪心 + 概率期望 + 高斯消元的更多相关文章
- P3232 [HNOI2013]游走——无向连通图&&高斯消元
题意 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编 ...
- BZOJ.3143.[HNOI2013]游走(概率 期望 高斯消元)
题目链接 参考 远航之曲 把走每条边的概率乘上分配的标号就是它的期望,所以我们肯定是把大的编号分配给走的概率最低的边. 我们只要计算出经过所有点的概率,就可以得出经过一条边(\(u->v\))的 ...
- [HNOI2013] 游走 - 概率期望,高斯消元,贪心
假如我们知道了每条边经过的期望次数,则变成了一个显然的贪心.现在考虑如何求期望次数. 由于走到每个点后各向等概率,很显然一条边的期望次数可以与它的两个端点的期望次数,转化为求点的期望次数 考虑每个点对 ...
- [HNOI2011]XOR和路径 概率期望 高斯消元
题面 题解:因为异或不太好处理,,,因此按位来算,这样最后的答案就是每一位上的值乘对应的权值再求和.本着期望要倒退的原则,,,我们设$f[i]$表示从$i$到$n$,xor和为1的概率.那么观察$xo ...
- luoguP4457 [BJOI2018]治疗之雨 概率期望 + 高斯消元
应该是最后一道紫色的概率了....然而颜色啥也代表不了.... 首先看懂题意: 你现在有$p$点体力,你的体力上限为$n$ 在一轮中, 1.如果你的体力没有满,你有$\frac{1}{m + 1}$的 ...
- 4.23 子串 AC自动机 概率期望 高斯消元
考虑40分. 设出状态 f[i]表示匹配到了i位还有多少期望长度能停止.可以发现这个状态有环 需要高斯消元. 提供一种比较简单的方法:由于期望的线性可加性 可以设状态f[i]表示由匹配到i到匹配到i+ ...
- BZOJ4820 SDOI2017硬币游戏(概率期望+高斯消元+kmp)
容易想到的做法是建出AC自动机,高斯消元.然而自动机上节点数量是nm的. 注意到我们要求的变量只有n个,考虑将其他不用求的节点合并为一个变量.这个变量即表示随机生成一个串,其不包含任何一个模板串的概率 ...
- UVA-10828 (概率期望+高斯消元)
题意: 给个有向图,每个节点等概率转移到它的后继节点,现在问一些节点的期望访问次数; 思路: 对于一个点v,Ev=Ea/d[a]+Eb/d[b]+Ec/d[c];a,b,c是v的前驱节点; 然后按这个 ...
- [BZOJ3143][HNOI2013]游走(期望+高斯消元)
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3576 Solved: 1608[Submit][Status ...
随机推荐
- 51nod 1074 约瑟夫环 V2
N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数.问最后剩下的人的编号. 例如:N = 3,K = 2.2号先出列,然后是1号,最后剩下的是3号. ...
- Big O
评价一个计算机算法的效率时用到的方法我们称之为Big O(Order of [大约是]). 有序二分查找算法: 比如我们通过二分查找算法查找容器里的10个数据. 那么,我们需要查找一个数据时正常应该是 ...
- KKT条件和拉格朗日乘子法详解
\(\frac{以梦为马}{晨凫追风}\) 最优化问题的最优性条件,最优化问题的解的必要条件和充分条件 无约束问题的解的必要条件 \(f(x)\)在\(x\)处的梯度向量是0 有约束问题的最优性条件 ...
- 76.ZYNQ-用PS控制DDR3内存读写
本编文章的目的主要用简明的方法对DDR3进行读写,当然这种方式每次读写都需要CPU干预,效率是比较低的,但是这是学习的过程吧. 本系列文章尽可能的让每一个实验都相对独立,过程尽可能保证完整性,保证实验 ...
- MAC和PHY的区别
一块以太网网卡包括OSI(开方系统互联)模型的两个层.物理层和数据链路层.物理层定义了数据传送与接收所需要的电与光信号.线路状态.时钟基准.数据编码和电路等,并向数据链路层设备提供标准接口.数据链路层 ...
- java处理金证中登查询图片二进制流问题
package com.szkingdom.kess.model; import java.io.File; import java.io.FileOutputStream; import java. ...
- 148.Sort List---链表排序(冒泡、归并)
题目链接 题目大意:对链表进行排序,要求时间复杂度是o(nlgn). 法一:冒泡,不交换结点,而交换结点中的数值.超时了.代码如下: public ListNode sortList(ListNode ...
- centos7安装ssh服务
1.查看是否安装了相关软件: rpm -qa|grep -E "openssh" 显示结果含有以下三个软件,则表示已经安装,否则需要安装缺失的软件 openssh-ldap-6.6 ...
- acm专题---最短路
spfa的时间复杂度是0(e) 题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅 ...
- ASP .NET CORE MVC 部署Windows 系统上 IIS具体步骤---.Net Core 部署到 IIS位系统中的步骤
一.IIS 配置 启用 Web 服务器 (IIS) 角色并建立角色服务. 1.Windows Ddesktop 桌面操作系统(win7及更高版本) 导航到“控制面板” > “程序” > “ ...