洛谷P3232 [HNOI2013]游走(高斯消元+期望)
所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了……
首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号
边的期望次数是多少呢?可以先算出点的概率
$p(u,v)=\frac{p[u]}{d[u]}+\frac{p[v]}{d[v]}$
$p[u]$表示经过这个点的期望次数,$d[u]$表示这个点的度数
那么点的期望次数怎么求?
$p[u]=\sum_{(u,v)\in E}\frac{p[v]}{d[v]}$
然后发现这玩意儿会产生环,因为一个点的期望次数需要由它周围的点推出,他周围的点又需要它推出
那么我们考虑列方程,用高斯消元求解
代码如下
for(int i=;i<n;++i){
f[i][i]=1.0;
for(int j=head[i];j;j=Next[j])
if(ver[j]!=n)
f[i][ver[j]]=-/d[ver[j]];
}
f[][n]=;
其中$f[i][j]$表示从$j$转移到$i$的期望次数
这个方程实际上是$这个点的期望次数*1-所有相邻的点转移过来的期望次数=0$
然后因为一开始在第一个点,所以第一个点必定到,设为$f[1][n]=1$
//minamoto
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while((ch=getc())>''||ch<'')
(ch=='-')&&(flag=true);
for(res=num;(ch=getc())<=''&&ch>='';res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int N=;const double eps=1e-;
int ver[N*N*],Next[N*N*],from[N*N*],to[N*N*],head[N],tot,n,m;
double d[N],f[N][N],ans[N],sum,E[N*N*];
inline void add(int u,int v){
ver[++tot]=v,Next[tot]=head[u],head[u]=tot;
}
void gauss(){
for(int i=;i<n;++i){
int k=i;
for(int j=i+;j<n;++j)
if(fabs(f[k][i])<fabs(f[j][i])) k=j;
if(k!=i) swap(f[i],f[k]);
double div=f[i][i];
for(int j=i;j<=n;++j) f[i][j]/=div;
for(int j=i+;j<n;++j){
double t=f[j][i];
for(int k=;k<n+;++k)
f[j][k]-=t*f[i][k];
}
}
for(int i=n-;i;--i){
for(int j=i+;j<n;++j)
f[i][n]-=f[i][j]*ans[j];
ans[i]=f[i][n]/f[i][i];
}
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),m=read();
for(int i=,u,v;i<=m;++i){
u=read(),v=read();add(u,v),add(v,u);
d[u]+=,d[v]+=;
from[i]=u,to[i]=v;
}
for(int i=;i<n;++i){
f[i][i]=1.0;
for(int j=head[i];j;j=Next[j])
if(ver[j]!=n)
f[i][ver[j]]=-/d[ver[j]];
}
f[][n]=;
gauss();
for(int i=;i<=m;++i)
E[i]=ans[from[i]]/d[from[i]]+ans[to[i]]/d[to[i]];
sort(E+,E++m);
for(int i=;i<=m;++i) sum+=E[i]*(m-i+1.0);
printf("%.3lf\n",sum);
return ;
}
洛谷P3232 [HNOI2013]游走(高斯消元+期望)的更多相关文章
- BZOJ 3143 HNOI2013 游走 高斯消元 期望
这道题是我第一次使用高斯消元解决期望类的问题,首发A了,感觉爽爽的.... 不过笔者在做完后发现了一些问题,在原文的后面进行了说明. 中文题目,就不翻大意了,直接给原题: 一个无向连通图,顶点从1编号 ...
- 洛谷P3232[HNOI2013]游走
有一个无向简单连通图,顶点从 \(1\) 编号到 \(n\),边从 \(1\) 编号到 \(m\) 小Z在该图上进行随机游走,初始时小Z在\(1\)号顶点,每一步小Z以相等的概率随机选 择当前顶点的某 ...
- [bzoj3143] [洛谷P3232] [HNOI2013] 游走
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- 洛谷 P3232 [HNOI2013]游走
链接: P3232 题意: 和上次考试 T4 的简化且无修改一样,经典图上高斯消元求期望. 分析: 要求出每个点的期望出发次数 \(f_i\),每个点度数为 \(d_i\),有 \[f1=\sum\d ...
- bzoj 3143: [Hnoi2013]游走 高斯消元
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1026 Solved: 448[Submit][Status] ...
- Luogu3232 HNOI2013 游走 高斯消元、期望、贪心
传送门 这种无向图上从一个点乱走到另一个点的期望题目好几道与高斯消元有关 首先一个显然的贪心:期望经过次数越多,分配到的权值就要越小. 设$du_i$表示$i$的度,$f_i$表示点$i$的期望经过次 ...
- BZOJ3143:[HNOI2013]游走(高斯消元)
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- 洛谷P2973 [USACO10HOL]赶小猪(高斯消元 期望)
题意 题目链接 Sol 设\(f[i]\)表示炸弹到达\(i\)这个点的概率,转移的时候考虑从哪个点转移而来 \(f[i] = \sum_{\frac{f(j) * (1 - \frac{p}{q}) ...
- 洛谷3317 SDOI2014重建(高斯消元+期望)
qwq 一开始想了个错的做法. 哎 直接开始说比较正确的做法吧. 首先我们考虑题目的\(ans\)该怎么去求 我们令\(x\)表示原图中的某一条边 \[ans = \sum \prod_{x\in t ...
随机推荐
- kubernetes-notes--阅读笔记
文档地址 https://www.huweihuang.com/kubernetes-notes/
- pdf文件的作成
Dim Report As New crProgressList Report.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.P ...
- 6 Maven聚合与集成
Maven的聚合特性能够把项目的各个模块聚合在一起构件,而Maven的继承特性能够帮助抽取各个模块相同的依赖和插件等配置,简化POM的同时,还能促进各个模块配置的一致性. 1.聚合 为 ...
- SAP bseg 使用注意点:1.不要使用;2.有主键再用,
粗表-簇表 cluster-table BSEGRFBLG 池表 pool-table 我記的沒錯的話,在21天學會ABAP中有一節是專門在講Cluster table,另外在 www.sapfans ...
- jQuery remove()与jQuery empty()的区别
jQuery remove() 方法删除被选元素及其子元素.举例如下: <!DOCTYPE html> <html> <head> <script src=& ...
- Docker的远程访问
$docker : info (10.211.55是另一台服务器的地址) 频繁访问远程的docker服务器使用-H选项很麻烦,使用环境变量DOCKER_HOST, $export DOCKER_HOS ...
- SpringSecurityLDap
ldap,用于用户登录的权限管理, 可参考:http://www.cnblogs.com/icuit/archive/2010/06/10/1755575.html
- 用mingw-w64 编译 x64 位的ffmpeg
http://blog.sina.com.cn/s/blog_6125d067010168dt.html 工作中用到了ffmpeg x64. 发现编译出来x64的ffmpeg,很不容易.特记录下来.原 ...
- hdu 1753 大明A+B(大数)
题意:小数大数加法 思路:大数模板 #include<iostream> #include<stdio.h> #include<string.h> using na ...
- C语言教学杂记——字母排序
一个人在被告诉一个问题应该怎么被解决后,而且亲身试验效果OK后,一旦遇到类似的问题,就会条件反射般直接拿这个方法来用了.很少会去想为什么要用这个方法,会不会有什么隐患,还有没有别的方法呢,等等这些问题 ...