赞
踩
题目链接
题意:求图的乘积最长路,迪杰斯特拉变形,初始化需要用零元更新
#include<iostream> #include<algorithm> #include<string.h> using namespace std; const int N=1001; double dis[N],g[N][N]; bool st[N]; int n,m; void dijistra() { for(int i=1;i<=n;i++) { int t=-1; for(int j=1;j<=n;j++) if(st[j]==0 && (t==-1 || dis[t]<dis[j])) t=j; st[t]=1; for(int j=1;j<=n;j++) dis[j]=max(dis[j],dis[t]*g[t][j]); } } int main() { while(cin>>n&&n) { cin>>m; memset(dis,0,sizeof dis); dis[1]=1; memset(g,0,sizeof g); memset(st,0,sizeof st); while(m--) { int a,b,c; cin>>a>>b>>c; g[a][b]=g[b][a]=max(g[a][b],c/100.0); } dijistra(); printf("%.6lf percent\n",dis[n]*100.0); } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。