bzoj 3143: [Hnoi2013]游走 期望dp+高斯消元
2017-01-12 15:03
302 查看
题意
给出一个n个点的无向图,要求给每条边标号1-m,每条边的长度即为标号,问从1走到n的最小期望步数是多少。n<=500
分析
一开始没有思路。显然要求出每一条边的期望走过次数,然后从多到少编号。
那么我们可以先求出每个点的期望到达次数p[i]
显然有p[i]=∑j可以到达ip[j]/d[j]
特殊的是p[1]还要+1
d[j]表示j的度数
那么就可以用高斯消元啦
然后就可以求出每条边的期望经过次数啦。
代码
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #define N 505 #define M 300005 using namespace std; int cnt,n,m,last ,x[M],y[M],d ; double a ,val[M]; struct edge{int to,next;}e[M*2]; void addedge(int u,int v) { e[++cnt].to=v;e[cnt].next=last[u];last[u]=cnt; e[++cnt].to=u;e[cnt].next=last[v];last[v]=cnt; } void gauss(int n) { for (int i=1;i<=n;i++) { int l=i; for (int j=i+1;j<=n;j++) if (abs(a[j][i])>abs(a[l][i])) j=l; if (l!=i) for (int j=1;j<=n+1;j++) swap(a[i][j],a[l][j]); double t=a[i][i]; for (int j=1;j<=n+1;j++) a[i][j]/=t; for (int j=1;j<=n;j++) if (j!=i&&a[j][i]) { t=a[j][i]; for (int k=1;k<=n+1;k++) a[j][k]-=t*a[i][k]; } } } int main() { scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d",&x[i],&y[i]); d[x[i]]++;d[y[i]]++; addedge(x[i],y[i]); } for (int i=1;i<n;i++) { a[i][i]=-1; for (int j=last[i];j;j=e[j].next) if (e[j].to!=n) a[i][e[j].to]=(double)1.0/d[e[j].to]; } a[1] =-1; gauss(n-1); for (int i=1;i<=m;i++) val[i]=a[x[i]] /d[x[i]]+a[y[i]] /d[y[i]]; sort(val+1,val+m+1); double ans=0; for (int i=1;i<=m;i++) ans+=val[i]*(m-i+1); printf("%.3lf",ans); return 0; }
相关文章推荐
- 【bzoj3143】[Hnoi2013]游走 期望dp+高斯消元
- BZOJ 3143 HNOI2013 游走 期望DP+高斯消元
- [期望DP+高斯消元] BZOJ3143: [Hnoi2013]游走
- bzoj3143 [Hnoi2013]游走 (期望概率DP + 高斯消元)
- BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元
- 【BZOJ3143】[Hnoi2013]游走 期望DP+高斯消元
- 【BZOJ3143】【Hnoi2013】 游走 期望DP 高斯消元
- 【BZOJ 3143】 [Hnoi2013]游走 期望DP|高斯消元|贪心
- 【BZOJ3143】[Hnoi2013]游走【高斯消元】【期望DP】【贪心】
- [BZOJ3143][Hnoi2013]游走(概率期望+高斯消元)
- bzoj 3143 [Hnoi2013]游走(贪心,高斯消元,期望方程)
- bzoj 3143: [Hnoi2013]游走 (概率与期望+高斯消元)
- 【BZOJ 3143】【Hnoi2013】游走 期望+高斯消元
- [BZOJ3143][HNOI2013]游走(期望+高斯消元)
- BZOJ 3143: [Hnoi2013]游走 高斯消元 期望
- bzoj 3143 [Hnoi2013]游走【高斯消元+dp】
- [BZOJ]3143: [Hnoi2013]游走 期望+高斯消元
- bzoj3143: [Hnoi2013]游走【概率dp+高斯消元】
- 【BZOJ】3143: [Hnoi2013]游走 期望+高斯消元
- [BZOJ3143][Hnoi2013][概率与期望][高斯消元]游走