http://www.lydsy.com/JudgeOnline/problem.php?id=3143

计算每条边经过的概率e[]

然后经过概率多的分配的编号大,经过概率少的分配的编号小

如何计算边经过的概率?

假设我们知道点的经过的概率p[]

若边i连接u和v,那么e[i]=p[u]/d[u]+p[v]/d[v]

d表示点的度数

如何计算点的经过概率?

dp[i]=Σ dp[j]/d[j]

高斯消元求解

注意到达终点就不能再走了,所以高斯消元的系数中不涉及和终点有关的信息

注意起点1的方程是 dp[1]=1+Σ dp[j]/d[j]

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<iostream>
  4. #include<algorithm>
  5.  
  6. using namespace std;
  7.  
  8. #define N 503
  9.  
  10. int tot;
  11. int front[N],to[N*N*],nxt[N*N*],from[N*N*];
  12.  
  13. double d[N];
  14.  
  15. double a[N][N];
  16.  
  17. double e[N*N];
  18.  
  19. void read(int &x)
  20. {
  21. x=; char c=getchar();
  22. while(!isdigit(c)) c=getchar();
  23. while(isdigit(c)) { x=x*+c-''; c=getchar(); }
  24. }
  25.  
  26. void add(int u,int v)
  27. {
  28. to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; from[tot]=u;
  29. to[++tot]=u; nxt[tot]=front[v]; front[v]=tot; from[tot]=v;
  30. }
  31.  
  32. void gauss(int n)
  33. {
  34. int r; double t;
  35. for(int i=;i<n;++i)
  36. {
  37. r=i;
  38. for(int j=i+;j<n;++j)
  39. if(fabs(a[j][i])>fabs(a[r][i])) r=j;
  40. if(r!=i)
  41. for(int j=;j<=n;++j) swap(a[i][j],a[r][j]);
  42. for(int k=i+;k<n;++k)
  43. {
  44. t=a[k][i]/a[i][i];
  45. for(int j=i;j<=n;++j) a[k][j]-=t*a[i][j];
  46. }
  47. }
  48. for(int i=n-;i;--i)
  49. {
  50. for(int j=i+;j<n;++j) a[i][n]-=a[i][j]*a[j][n];
  51. a[i][n]/=a[i][i];
  52. }
  53. }
  54.  
  55. int main()
  56. {
  57. int n,m;
  58. read(n); read(m);
  59. int u,v;
  60. for(int i=;i<=m;++i)
  61. {
  62. read(u); read(v);
  63. add(u,v);
  64. d[u]++; d[v]++;
  65. }
  66. for(int i=;i<n;++i)
  67. {
  68. a[i][i]=;
  69. for(int j=front[i];j;j=nxt[j])
  70. if(to[j]!=n) a[i][to[j]]-=/d[to[j]];
  71. }
  72. a[][n]=;
  73. gauss(n);
  74. int cnt=;
  75. for(int i=;i<=tot;i+=) e[++cnt]=a[from[i]][n]/d[from[i]]+a[to[i]][n]/d[to[i]];
  76. sort(e+,e+m+,greater<double>());
  77. double ans=;
  78. for(int i=;i<=m;++i) ans+=e[i]*i;
  79. printf("%.3lf",ans);
  80. }

bzoj千题计划290:bzoj3143: [Hnoi2013]游走的更多相关文章

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

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

  2. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  3. BZOJ3143: [Hnoi2013]游走(期望DP 高斯消元)

    Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3597  Solved: 1618[Submit][Status][Discuss] Descript ...

  4. BZOJ3143:[HNOI2013]游走(高斯消元)

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

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

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

  6. bzoj千题计划142:bzoj3144: [Hnoi2013]切糕

    http://www.lydsy.com/JudgeOnline/problem.php?id=3144 如果D=2 ,两个点,高度为4,建图如下 #include<queue> #inc ...

  7. bzoj千题计划295:bzoj3140: [Hnoi2013]消毒

    http://www.lydsy.com/JudgeOnline/problem.php?id=3140 如果只有两维,那就是二分图最小点覆盖 现在是三维,但是a*b*c<=5000,说明最小的 ...

  8. bzoj千题计划294:bzoj3139: [Hnoi2013]比赛

    http://www.lydsy.com/JudgeOnline/problem.php?id=3139 队伍的顺序不会影响结果 将队伍的得分情况作为状态,记忆化搜索 就是先搜索第一只队伍的得分情况, ...

  9. bzoj千题计划293:bzoj3142: [Hnoi2013]数列

    http://www.lydsy.com/JudgeOnline/problem.php?id=3142 如果已知数列的差分数列a[1]~a[k-1] 那么这种差分方式对答案的贡献为 N-Σ a[i] ...

随机推荐

  1. C#字符串截取、获取当前电脑时间、判断输入日期对错 随手记

    字符串截取:这个就当复习了,看意见就可以 //身份证生日截取 //Console.WriteLine("请输入18位身份证号:"); //string x = Console.Re ...

  2. SVN回退版本

    执行svn up 命令 保证当前本地版本是最新的版本. svn up 执行svn log 命令,查看历史修改,确定需要回复的版本,如果想要对比2个不同版本的文件差异 可以使用命令 svn diff - ...

  3. docker教程——docker镜像打包上传

    在开始使用URLOS进行docker应用开发之前,我们先来了解一下docker镜像的打包方法.首先,安装URLOS,安装完成之后,docker也随之安装到了主机里.执行以下命令安装URLOS: cur ...

  4. 【MOOC EXP】Linux内核分析实验五报告

    程涵  原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 分析system_call中断处理过程 ...

  5. 修改servlet的模板代码

    实际开发中,这些生成的代码和注释一般我们都用不到的,每次都要手工删除这些注释和代码,很麻烦.下面以MyEclipse 2014(其实版本通用的,都可以修改)为例进行说明如何修改Servlet的模板代码 ...

  6. Android开发环境的发展演变调研

    Android开发环境的发展演变调研 前几年比较多的方法是用JDK+eclipse+ADT,该方法除了要配置JDK的路径之外, 还要在eclipse里面打开SDK Manage进行相应的操作.不过近两 ...

  7. NetFPGA Demo ——reference_nic_nf1_cml

    NetFPGA Demo --reference_nic_nf1_cml 实验平台 OS:deepin 15.4 开发板:NetFPGA_1G_CML 实验过程 从NetFPGA-1G-CML从零开始 ...

  8. Win2019 preview 版本的安装过程

    1. 加入 windows insider 协议 登录自己的账号 同意 insder 协议. 然后 https://www.microsoft.com/en-us/software-download/ ...

  9. [转帖]Kubernetes及容器编排的总体介绍【译】

    Kubernetes及容器编排的总体介绍[译] 翻译自The New Stack<Kubernetes 生态环境>作者:JANAKIRAM MSV和 KRISHNAN SUBRAMANIA ...

  10. mysql 命令行快速将数据库转移到另一个服务器中(数据库备份还原)

    想将A服务器中的数据库快速转移到B服务器中,一般是先从A服务器中备份下来,下载备份数据,还原到B服务器中.使用phpMyAdmin备份和还原针对数据量很小的情况下很方便,数据量大的话很容易中断失败. ...