bzoj3143游走——期望+高斯消元
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3143
只需算出每条边被经过的概率,将概率从小到大排序,从大到小编号,就可得到最小期望;
每条边经过的概率是其两端的点被走的次数/该点的度数的和;
而每个点被走的次数又需要从与其相连的点推过来,所以构成n个n元方程,进行高斯消元求解;
其中点n较为特殊,可以不去管它,因为所有路径到n后就不再走出来,也就是n到n的概率为0;
而因为所有路径从点1开始,所以1的次数平地+1。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int const M=*;
int n,m,u[M],v[M],d[];
double a[][],ans,x[],w[M];
void gauss()
{
for(int i=;i<n;i++)
{
int k=i;
for(int j=i+;j<n;j++)
if(fabs(a[j][i])>fabs(a[k][i]))k=j;//fabs
if(k!=i)
for(int l=i;l<=n+;l++)swap(a[k][l],a[i][l]);
for(int l=i+;l<n;l++)
{
double r=a[l][i]/a[i][i];//不是k!!!
for(int t=i;t<=n+;t++)
a[l][t]-=r*a[i][t];
}
}
x[n]=;//!!!
for(int i=n-;i;i--)
{
for(int j=i+;j<n;j++)a[i][n+]-=a[i][j]*x[j];
x[i]=a[i][n+]/a[i][i];
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&u[i],&v[i]);
d[u[i]]++;d[v[i]]++;
}
for(int i=;i<=m;i++)
{
a[u[i]][v[i]]+=1.0/d[v[i]];
a[v[i]][u[i]]+=1.0/d[u[i]];
}
for(int i=;i<n;i++)a[i][i]=-;
a[][n+]=-;
gauss();
// for(int i=1;i<=n;i++)
// printf("x[%d]=%.3lf\n",i,x[i]);
for(int i=;i<=m;i++)
w[i]=x[u[i]]/d[u[i]]+x[v[i]]/d[v[i]];
sort(w+,w+m+);
for(int i=;i<=m;i++)
ans+=(m-i+)*w[i];
printf("%.3lf",ans);
return ;
}
bzoj3143游走——期望+高斯消元的更多相关文章
- [BZOJ3143][HNOI2013]游走(期望+高斯消元)
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3576 Solved: 1608[Submit][Status ...
- 【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元
[题意]给定n个点m条边的无向连通图,每条路径的代价是其编号大小,每个点等概率往周围走,要求给所有边编号,使得从1到n的期望总分最小(求该总分).n<=500. [算法]期望+高斯消元 [题解] ...
- [HNOI2013]游走 期望+高斯消元
纪念首道期望题(虽说绿豆蛙的归宿才是,但是我打的深搜总觉得不正规). 我们求出每条边的期望经过次数,然后排序,经过多的序号小,经过少的序号大,这样就可以保证最后的值最小. 对于每一条边的期望经过次数, ...
- 【BZOJ 3143】【Hnoi2013】游走 期望+高斯消元
如果纯模拟,就会死循环,而随着循环每个点的期望会逼近一个值,高斯消元就通过列方正组求出这个值. #include<cstdio> #include<cctype> #inclu ...
- 【BZOJ3143】游走(高斯消元,数学期望)
[BZOJ3143]游走(高斯消元,数学期望) 题面 BZOJ 题解 首先,概率不会直接算... 所以来一个逼近法算概率 这样就可以求出每一条边的概率 随着走的步数的增多,答案越接近 (我卡到\(50 ...
- BZOJ3143 [Hnoi2013]游走 【高斯消元】
题目 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编 ...
- [luogu3232 HNOI2013] 游走 (高斯消元 期望)
传送门 题目描述 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得等 ...
- LOJ 2542 「PKUWC2018」随机游走 ——树上高斯消元(期望DP)+最值反演+fmt
题目:https://loj.ac/problem/2542 可以最值反演.注意 min 不是独立地算从根走到每个点的最小值,在点集里取 min ,而是整体来看,“从根开始走到点集中的任意一个点就停下 ...
- 洛谷P3232 [HNOI2013]游走(高斯消元+期望)
传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次 ...
随机推荐
- JS标签获取另一个页面传过来的href值
a href=b.html?id=楼主>B页面</a>b.html中的获取函数:function getParam(){C1=window.location.href.split(& ...
- 服务器Out of Memory
之前有次把图片存储在数据库,结果读取时候报错了:Out of Memory.. 图片本来不应该存储在数据库中的,消耗内存太大,既然已经这样,那就先解决问题,不改存储方式. 如果一个应用程序为了提高性能 ...
- php 求素数的二种方法
<?php for($i = 2;$i <= 100;$i++) { for($j = 2; $j <= ($r = $i / $j); $j++) { if(($i % $j)== ...
- MVP模式是你的救命稻草吗?
为什么要学习架构? 不管是MVC还是MVP,亦或则其他架构,它们的设计目的都是为了达到编码的最高境界,那就是:低藕合,高复用,易测试,好维护. 而要达到这个终极目标,首先要理解的是每个部分各自负责些什 ...
- Python基础语法08--MySql应用
python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. DB-API 是一个规范. 它定义了一系列 ...
- 哈理工2015 暑假训练赛 zoj 2976 Light Bulbs
MS Memory Limit:65536KB 64bit IO Format:%lld & %llu SubmitStatusid=14946">Practice ...
- 微信小程序 开发环境配置
1.注册小程序 (1)微信公众平台:https://mp.weixin.qq.com/(2)立即注册 (3)流程 (4)小程序注册 (5)填写相关信息,并去邮箱激活.这样小程序的账号就注册完成了. 2 ...
- Spring Boot 使用Java代码创建Bean并注冊到Spring中
从 Spring3.0 開始,添加了一种新的途经来配置Bean Definition,这就是通过 Java Code 配置 Bean Definition. 与Xml和Annotation两种配置方式 ...
- android学习笔记三--Activity 布局
1.线性布局 标签 :<LinearLayout></LinearLayout> 方向:android:orientation, 垂直:vertical 水平:Horizont ...
- HDU2084_数塔【简单题】【数塔】
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...