NKOJ 2266 (HNOI 2013)游走(高斯消元+数学期望)
来源:互联网 发布:青铜器 软件 编辑:程序博客网 时间:2024/04/30 07:53
P2266【HNOI2013 DAY2】游走
问题描述
一个无向连通图,顶点从1 编号到N,边从1 编号到M。小Z 在该图上进行随机游走,初始时小Z 在1 号顶点,每一步小Z 以相等的概率随机选择当前顶点的某条边,沿着这条边走到下一个顶点,获得等于这条边的编号的分数。当小Z到达N 号顶点时游走结束,总分为所有获得的分数之和。现在,请你对这M 条边进行编号,使得小Z 获得的总分的期望值最小。
输入格式
第一行是正整数N和M,分别表示该图的顶点数和边数,接下来M行每行是整数u,v(1≤u,v≤N),表示顶点u与顶点v之间存在一条边。
输入保证30%的数据满足N≤10,
100%的数据满足2≤N≤500, 1<=M<=150000且是一个无向简单连通图。
输出格式
仅包含一个实数,表示最小的期望值,保留3 位小数。
样例输入 1
3 3
2 3
1 2
1 3
样例输出 1
3.333
样例输入 2
5 10
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5
样例输出 2
17.800
显然的需要求出每条边的期望经过次数,假设这条边两端是
那么只需要求出每个点经过次数的期望,那么显然将
对于起点一号点,有
代码:
#include<stdio.h>#include<iostream>#include<algorithm>#include<cstring>#define N 555#define M 200005using namespace std;struct node{int a,b;double c;}e[M];bool cmp(node a,node b){return a.c>b.c;}int n,m,D[N];bool G[N][N];double A[N][N],X[N];void Gauss(int row,int col){ int i,j,x,y,MR;double t; for(x=1,y=1,MR=1;x<=row&&y<col;x++,y++,MR=x) { for(i=x+1;i<=row;i++)if(abs(A[i][y])>abs(A[MR][y]))MR=i; if(MR!=x)for(i=1;i<=col;i++)swap(A[x][i],A[MR][i]); if(!A[x][y]){x--;continue;} for(i=x+1;i<=row;i++) if(A[i][y]) { t=A[i][y]/A[x][y]; for(j=y;j<=col;j++)A[i][j]-=A[x][j]*t; } } for(i=row;i>=1;i--) { X[i]=A[i][col]; for(j=i+1;j<col;j++)X[i]-=X[j]*A[i][j]; X[i]/=A[i][i]; }}int main(){ int i,j,x,y;double ans=0; scanf("%d%d",&n,&m); for(i=1;i<=m;i++) { scanf("%d%d",&x,&y); G[x][y]=G[y][x]=1; e[i].a=x;e[i].b=y; D[x]++;D[y]++; } for(i=1;i<n;i++)A[i][i]=1.0; for(i=1;i<n;i++) for(j=1;j<n;j++) if(i!=j&&G[i][j])A[i][j]=-1.0/D[j]; A[1][n]=1;Gauss(n-1,n); for(i=1;i<=m;i++) { x=e[i].a;y=e[i].b; if(x!=n)e[i].c+=1.0*X[x]/(1.0*D[x]); if(y!=n)e[i].c+=1.0*X[y]/(1.0*D[y]); } sort(e+1,e+m+1,cmp); for(i=1;i<=m;i++)ans+=1.0*i*e[i].c; printf("%.3lf",ans);}
阅读全文
0 0
- NKOJ 2266 (HNOI 2013)游走(高斯消元+数学期望)
- [BZOJ3143][Hnoi2013]游走(概率期望+高斯消元)
- HNOI 2013 bzoj 3143 游走
- bzoj 3143: [Hnoi2013]游走 (概率与期望+高斯消元)
- [HNOI2013]游走 期望+高斯消元
- BZOJ3143 游走 [期望][高斯消元]
- 高斯消元裸题(期望)——【HNOI2013】游走
- [BZOJ3143][HNOI2013]游走(高斯消元解期望方程)
- NKOJ 2127 搜集卡片 (数学期望+状态压缩+递推)
- NKOJ 3893 聪聪和可可(数学期望+递推+最短路)
- NKOJ 3985 (HNOI 2012) 矿场搭建(Tarjan求割点)
- 【jzoj3221】【HNOI2013】【游走】【高斯消元】【期望】
- [BZOJ]3143 游走 期望 + 高斯消元
- Candy( 数学期望 )
- uva10288(数学期望)
- uva12230(数学期望)
- 数学期望(360)
- hnoi2013游走 (高斯消元)
- LED Tube(LED 灯管)常见欧规安规认证测试要求
- oracle的开启和关闭
- Java WebSocket 聊天室Demo
- HTC595的时序操作序分析
- 微信小程序多选框选中后改变样式--自定义图片
- NKOJ 2266 (HNOI 2013)游走(高斯消元+数学期望)
- C#读取Excel表格中数据并返回datatable
- [CentOS7环境搭建](一)VM中安装CentOS7
- 使用cookie保存用户的浏览记录
- 即将到来的Ionic4以及它使用的Stencil会产生什么影响?
- 用友U8 REP实践
- 数据结构实验之排序三:bucket sort
- [javase]杨辉三角形
- Ubuntu 16.04安装tomcat8