博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元
阅读量:6192 次
发布时间:2019-06-21

本文共 1734 字,大约阅读时间需要 5 分钟。

【题意】给定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
#include
#include
#include
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
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

你可能感兴趣的文章
【iCore3 双核心板_ uC/OS-III】例程十一:任务消息队列
查看>>
three.js
查看>>
ASP.NET Core 运行原理解剖[2]:Hosting补充之配置介绍
查看>>
ASP.NET Core 运行原理解剖[4]:进入HttpContext的世界
查看>>
C#的delegate简单练习
查看>>
【301】IDL与C#混合编程
查看>>
分治法应用之一——Strassen矩阵乘法(转)
查看>>
linux-diff命令
查看>>
必须关注的25位知名JavaScript开发者
查看>>
linq直接执行sql语句
查看>>
POJ - 1170 Shopping Offers (五维DP)
查看>>
【Linux学习】Linux的文件权限(一)
查看>>
python的内存管理机制
查看>>
一个基于 EasyUI 的前台架构(3)封装操作Tabs的JS代码
查看>>
《深入理解Android 卷III》第四章 深入理解WindowManagerService
查看>>
hdu 5093 二分匹配
查看>>
a erlang crawler
查看>>
hdu 3586 Information Disturbing(树形dp + 二分)
查看>>
无聊,只发两张图……
查看>>
高考前
查看>>