【题意】给定n个点m条边的无向连通图,每条路径的代价是其编号大小,每个点等概率往周围走,要求给所有边编号,使得从1到n的期望总分最小(求该总分)。n<=500。

【算法】期望+高斯消元

【题解】显然,应使经过次数越多的边编号越小,问题转化为求每条边的期望经过次数。

边数太多,容易知道f(u,v)=f(u)/out(u)+f(v)/out(v),所以转化为求每个点的期望经过次数,这就是驱逐猪猡了。

设f[x]表示点x的期望经过次数,根据全期望公式(讨论“经过“的问题不能依赖于下一步):

$$f[x]=\sum_{y}\frac{f[y]}{out[y]} \ \ , \ \ y \rightarrow x$$

最后f[1]++,f[n]=0。(点1一开始就经过一次,点n不能重新出来,所以设成0不然会影响别的点)

复杂度O(n^3)。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=510,M=1000010;//
int n,m,out[maxn],u[M],v[M],c[M];
double a[maxn][maxn],b[M];
void gauss(){for(int i=1;i<n;i++){int r=i;for(int j=i+1;j<=n;j++)if(fabs(a[j][i])>fabs(a[r][i]))r=j;if(r!=i)for(int j=i;j<=n+1;j++)swap(a[r][j],a[i][j]);for(int j=i+1;j<=n;j++){for(int k=n+1;k>=i;k--){a[j][k]-=a[j][i]/a[i][i]*a[i][k];//
            }}}for(int i=n;i>=1;i--){for(int j=i+1;j<=n;j++)a[i][n+1]-=a[i][j]*a[j][n+1];a[i][n+1]/=a[i][i];}
}
bool cmp(double a,double b){return a>b;}
int main(){freopen("input6.txt","r",stdin);scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d",&u[i],&v[i]);a[u[i]][v[i]]++;out[u[i]]++;if(u[i]!=v[i])a[v[i]][u[i]]++,out[v[i]]++;}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)if(out[j])a[i][j]/=out[j];a[i][i]--;}a[1][n+1]--;for(int j=1;j<=n+1;j++)a[n][j]=0;a[n][n]=1;gauss();for(int i=1;i<=m;i++)b[i]=a[u[i]][n+1]/out[u[i]]+a[v[i]][n+1]/out[v[i]];double ans=0;sort(b+1,b+m+1,cmp);for(int i=1;i<=m;i++)ans+=b[i]*i;printf("%.3lf",ans+(1e-13));return 0;
}

View Code

注意:边数组比点数组大。

转载于:https://www.cnblogs.com/onioncyc/p/8543351.html

【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元相关推荐

  1. bzoj 3143: [Hnoi2013]游走(高斯消元)

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3171  Solved: 1390 [Submit][Stat ...

  2. [BZOJ 3143][Hnoi2013]游走(高斯消元+期望)

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

  3. BZOJ 3143: [Hnoi2013]游走 高斯消元 期望

    3143: [Hnoi2013]游走 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3463  Solved: 1535 [Submit][Stat ...

  4. bzoj3143,P3232-[Hnoi2013]游走【数学期望,高斯消元,贪心】

    正题 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3143 https://www.luogu.org/problem/P3232 题 ...

  5. BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]

    2707: [SDOI2012]走迷宫 题意:求s走到t期望步数,\(n \le 10^4\),保证\(|SCC| \le 100\) 求scc缩点,每个scc高斯消元,scc之间直接DP 注意每次清 ...

  6. P4321-随机漫游【状压dp,数学期望,高斯消元】

    正题 题目链接:https://www.luogu.com.cn/problem/P4321 题目大意 给出nnn个点mmm条边的一张无向图,qqq次询问. 每次询问给出一个点集和一个起点,求从起点出 ...

  7. BZOJ.4820.[SDOI2017]硬币游戏(思路 高斯消元 哈希/AC自动机/KMP)

    BZOJ 洛谷 建出AC自动机,每个点向两个儿子连边,可以得到一张有向图.参照 [SDOI2012]走迷宫 可以得到一个\(Tarjan\)+高斯消元的\(O((nm)^3)\)的做法.(理论有\(6 ...

  8. BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )

    一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...

  9. BZOJ 2466 中山市选2009 树 高斯消元+暴力

    题目大意:树上拉灯游戏 高斯消元解异或方程组,对于全部的自由元暴力2^n枚举状态,代入计算 这做法真是一点也不优雅... #include <cstdio> #include <cs ...

最新文章

  1. asp.net断点续传技术
  2. gogs可以自动化部署吗_Git-WebHook 自动化部署工具 - 支持Github / GitLab / Gogs / GitOsc...
  3. 14.count-api
  4. C#几个经常犯错误汇总
  5. mysql显示RMB符号乱码_mysql显示乱码
  6. Python静态方法 类方法
  7. 面向对象之封装的成本价值
  8. #大数加减乘除#校赛D题solve
  9. 区块链软件公司:供应链高本钱的运用区块链技能是否值得?
  10. 线上服务器老是卡,该如何优化?
  11. Docker 运行常用容器
  12. Python计算长方形面积(带参数函数demo)
  13. 空间句法(二)——Axwoman 6.0
  14. LLC谐振变换器学习二
  15. 软件开发中常见名词解释
  16. SpringBoot的热布署和多环境配置(四)
  17. ASP.NET 复习资料
  18. patch 修补文件命令
  19. java的class文件批量反编译成java
  20. 32位程序在64位系统上运行

热门文章

  1. 浅谈:SEO优化如何做好网站内链
  2. python抢票代码_五一要来了,教你用Python动刷新抢12306火车票,附源码
  3. (第四天)扑克谐音编码
  4. 2020面试题(答案中)
  5. 计算机常见问题维修,计算机常见问题维修小技巧
  6. Android Studio SQLlite学习
  7. 1.1 第一课:如何打开Excel 2016软件 [原创Excel教程]
  8. 嵌入式入门———开发板文件烧录
  9. C++程序员学习资料汇总
  10. Pokemon Go 不锁了!但是抓着抓着小精灵 数据也泄露了?