如果纯模拟,就会死循环,而随着循环每个点的期望会逼近一个值,高斯消元就通过列方正组求出这个值。

#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
const double eps=1e-9;
bool vis[503];
double f[503],a[503][503],ans[500*500];
int N,M,cnt=0,du[503],a1[500*500],a2[500*500];
double fabs(double x){return x>0?x:-x;}
int getint(){char c;while (!isdigit(c=getchar()));int a=c-'0';while(isdigit(c=getchar()))a=a*10+c-'0';return a;}
void prepare(){
for(int i=1;i<=M;++i){
a[a1[i]][a2[i]]+=1.0/du[a2[i]];
a[a2[i]][a1[i]]+=1.0/du[a1[i]];
}
for(int i=1;i<=N;++i)a[N][i]=0;
for(int i=1;i<N;++i)a[i][i]=-1.0;
a[1][N+1]=-1.0;a[N][N]=1.0;
}
void swapp(double &x,double &y){double z=x;x=y;y=z;}
void gauss(){
for(int i=1;i<=N;++i){
int now=i;
for(int j=i+1;j<=N;++j)if(fabs(a[j][i])>fabs(a[now][i]))now=j;
if (now!=i)for(int j=i;j<=N+1;++j)swapp(a[now][j],a[i][j]);
for(int j=i+1;j<=N;++j){
double t=a[j][i]/a[i][i];
for(int k=i;k<=N+1;++k)a[j][k]-=t*a[i][k];
}
}
for(int i=N;i>=1;--i){
for(int j=N;j>i;--j){
a[i][N+1]-=a[j][N+1]*a[i][j];
}a[i][N+1]/=a[i][i];
}
}
bool cmp(double a,double b){return a>b;}
int main(){
memset(a,0,sizeof(a));
memset(du,0,sizeof(du));
N=getint();M=getint();
for(int i=1;i<=M;++i){
a1[i]=getint();a2[i]=getint();
du[a1[i]]++;du[a2[i]]++;
}prepare();
gauss();
cnt=0;
for(int i=1;i<=M;++i){
ans[++cnt]=a[a1[i]][N+1]/du[a1[i]]+a[a2[i]][N+1]/du[a2[i]];
}
sort(ans+1,ans+M+1,cmp);
double sa=0;
for(int i=1;i<=M;++i) sa+=ans[i]*i*1.0;
printf("%.3lf\n",sa);
return 0;
}

  这样就可以了

【BZOJ 3143】【Hnoi2013】游走 期望+高斯消元的更多相关文章

  1. 【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元

    [题意]给定n个点m条边的无向连通图,每条路径的代价是其编号大小,每个点等概率往周围走,要求给所有边编号,使得从1到n的期望总分最小(求该总分).n<=500. [算法]期望+高斯消元 [题解] ...

  2. bzoj 3143 [Hnoi2013]游走【高斯消元+dp】

    参考:http://blog.csdn.net/vmurder/article/details/44542575 和2337有点像 设点u的经过期望(还是概率啊我也分不清,以下都分不清)为\( x[u ...

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

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

  4. [HNOI2013]游走 期望+高斯消元

    纪念首道期望题(虽说绿豆蛙的归宿才是,但是我打的深搜总觉得不正规). 我们求出每条边的期望经过次数,然后排序,经过多的序号小,经过少的序号大,这样就可以保证最后的值最小. 对于每一条边的期望经过次数, ...

  5. bzoj 3143 [Hnoi2013]游走 期望dp+高斯消元

    [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3394  Solved: 1493[Submit][Status][Disc ...

  6. [luogu3232 HNOI2013] 游走 (高斯消元 期望)

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

  7. 洛谷P3232 [HNOI2013]游走(高斯消元+期望)

    传送门 所以说我讨厌数学……期望不会高斯消元也不会……好不容易抄好了高斯消元板子被精度卡成琪露诺了…… 首先,我们先算出走每一条边的期望次数,那么为了最小化期望,就让大的期望次数乘上小编号 边的期望次 ...

  8. BZOJ3143 [Hnoi2013]游走 【高斯消元】

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

  9. bzoj3143游走——期望+高斯消元

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3143 只需算出每条边被经过的概率,将概率从小到大排序,从大到小编号,就可得到最小期望: 每条 ...

随机推荐

  1. nginx 一二事(1) - 简单图片服务器解决方案

    最近经常有人问图片上传怎么做,有哪些方案做比较好,也看到过有关于上传图片的做法,但是都不是最好的 今天再这里简单讲一下上传图片以及图片服务器的大致理念 如果是个人项目或者企业小项目,仅仅只有十来号人使 ...

  2. 转: 最值得阅读学习的 10 个 C 语言开源项目代码

    from: http://www.iteye.com/news/29665 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同 ...

  3. Android优化—— Google 发布 Android 性能优化典范

    阅读目录 0)Render Performance 1)Understanding Overdraw 2)Understanding VSYNC 3)Tool:Profile GPU Renderin ...

  4. iOS原生地图开发进阶——使用导航和附近兴趣点检索

    iOS原生地图开发进阶——使用导航和附近兴趣点检索 iOS中的mapKit框架对国际化的支持非常出色.在前些篇博客中,对这个地图框架的基础用法和标注与覆盖物的添加进行了详细的介绍,这篇博客将介绍两个更 ...

  5. 【转】【C#】C# 不常用关键字

    1.__arglist 让我们先从__arglist开始. __arglist是用来给方法传送参数.通常我们是通过函数头部指定的参数列表给方法传递参数的.如果我们想要给方法传递一组新的参数,我们需要重 ...

  6. The Linux Storage Stack Diagram

    相关文章: 如何提高Linux下块设备IO的整体性能?

  7. 如何“刷leetcode”

    做题目的: 获得 offer 巩固算法与数据结构知识,将学到的东西用出来 如何做题: 根据章节与难度来做. 比如你学了 linked list,就去找到标签为 linked list 的题目,然后根据 ...

  8. Android清单文件详解(三)----应用程序的根节点<application>

    <application>节点是AndroidManifest.xml文件中必须持有的一个节点,它包含在<manifest>节点下.通过<application>节 ...

  9. LeetCode 笔记26 Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  10. Qt opencv程序运行异常

    搭建了两次qt opencv vs ,经常出现程序运行异常.找了几个原因如下: 1.opencv的路径未配置或配置有误. 2.qt中pro文件包含不正确. 3.测试opencv程序不正确.如视频或图片 ...