【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元
【题意】给定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]游走 期望+高斯消元相关推荐
- bzoj 3143: [Hnoi2013]游走(高斯消元)
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3171 Solved: 1390 [Submit][Stat ...
- [BZOJ 3143][Hnoi2013]游走(高斯消元+期望)
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- BZOJ 3143: [Hnoi2013]游走 高斯消元 期望
3143: [Hnoi2013]游走 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3463 Solved: 1535 [Submit][Stat ...
- bzoj3143,P3232-[Hnoi2013]游走【数学期望,高斯消元,贪心】
正题 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3143 https://www.luogu.org/problem/P3232 题 ...
- BZOJ 2707: [SDOI2012]走迷宫 [高斯消元 scc缩点]
2707: [SDOI2012]走迷宫 题意:求s走到t期望步数,\(n \le 10^4\),保证\(|SCC| \le 100\) 求scc缩点,每个scc高斯消元,scc之间直接DP 注意每次清 ...
- P4321-随机漫游【状压dp,数学期望,高斯消元】
正题 题目链接:https://www.luogu.com.cn/problem/P4321 题目大意 给出nnn个点mmm条边的一张无向图,qqq次询问. 每次询问给出一个点集和一个起点,求从起点出 ...
- BZOJ.4820.[SDOI2017]硬币游戏(思路 高斯消元 哈希/AC自动机/KMP)
BZOJ 洛谷 建出AC自动机,每个点向两个儿子连边,可以得到一张有向图.参照 [SDOI2012]走迷宫 可以得到一个\(Tarjan\)+高斯消元的\(O((nm)^3)\)的做法.(理论有\(6 ...
- BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )
一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...
- BZOJ 2466 中山市选2009 树 高斯消元+暴力
题目大意:树上拉灯游戏 高斯消元解异或方程组,对于全部的自由元暴力2^n枚举状态,代入计算 这做法真是一点也不优雅... #include <cstdio> #include <cs ...
最新文章
- asp.net断点续传技术
- gogs可以自动化部署吗_Git-WebHook 自动化部署工具 - 支持Github / GitLab / Gogs / GitOsc...
- 14.count-api
- C#几个经常犯错误汇总
- mysql显示RMB符号乱码_mysql显示乱码
- Python静态方法 类方法
- 面向对象之封装的成本价值
- #大数加减乘除#校赛D题solve
- 区块链软件公司:供应链高本钱的运用区块链技能是否值得?
- 线上服务器老是卡,该如何优化?
- Docker 运行常用容器
- Python计算长方形面积(带参数函数demo)
- 空间句法(二)——Axwoman 6.0
- LLC谐振变换器学习二
- 软件开发中常见名词解释
- SpringBoot的热布署和多环境配置(四)
- ASP.NET 复习资料
- patch 修补文件命令
- java的class文件批量反编译成java
- 32位程序在64位系统上运行