「bsoj5176」信息传递 - Floyd+矩阵快速幂 发表于 2017-11-05 | 分类于 OI | 评论: | 阅读次数: 题目大意 题目分析我们可以用Floyd预处理出多源最短路。接着枚举起始点和终点构造邻接矩阵。最后对邻接矩阵做快速幂即可。 代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495#include<algorithm>#include<iostream>#include<iomanip>#include<cstring>#include<cstdlib>#include<vector>#include<cstdio>#include<cmath>#include<queue>using namespace std;inline const int Get_Int() { int num=0,bj=1; char x=getchar(); while(x<'0'||x>'9') { if(x=='-')bj=-1; x=getchar(); } while(x>='0'&&x<='9') { num=num*10+x-'0'; x=getchar(); } return num*bj;}const int maxn=205;struct Matrix { int n,m; double a[maxn][maxn]; Matrix(int n,int m) { init(n,m); } Matrix(int n,int m,char E) { init(n,m); for(int i=1; i<=n; i++)a[i][i]=1; } void init(int n,int m) { this->n=n; this->m=m; memset(a,0,sizeof(a)); } double* operator [] (const int x) { return a[x]; } Matrix operator * (Matrix& b) { Matrix c(n,b.m); for(int i=1; i<=n; i++) for(int j=1; j<=b.m; j++) for(int k=1; k<=m; k++) c[i][j]+=a[i][k]*b[k][j]; return c; } void operator *= (Matrix& b) { *this=*this*b; } Matrix operator ^ (int b) { Matrix ans(n,m,'e'),a=*this; while(b>0) { if(b&1)ans=ans*a; a*=a; b>>=1; } return ans; }};int n,t,map[maxn][maxn];double p[maxn];int main() { n=Get_Int(); t=Get_Int(); for(int i=1; i<=n; i++)scanf("%lf",&p[i]); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) map[i][j]=map[j][i]=Get_Int(); for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) map[i][j]=min(map[i][j],map[i][k]+map[k][j]); Matrix A(n,n); for(int i=1; i<=n; i++) { double sum=0; for(int j=1; j<=n; j++)sum+=map[i][j]; for(int j=1; j<=n; j++)A[i][j]=map[i][j]/sum; } A=A^t; for(int i=1; i<=n; i++) { double sum=0; for(int j=1; j<=n; j++)sum+=A[j][i]*p[j]; printf("%0.6lf\n",sum); } return 0;} 相关文章 「NOIP十连赛day1」散步walk - 拆点最短路 「dwjshift毒瘤模拟赛」path - 平面图最短路转最小割 (毒瘤,未AC) 「SDOI2017」天才黑客 - 点集转化+虚树+线段树优化建边+最短路 「SDOI2013」逃考 - 半平面交+最短路径 「CodePlus 2017 11月赛」大吉大利,晚上吃鸡! - 最短路径DAG+bitset