Sicily 1784. Road Toll (Dijkstra变形)

来源:互联网 发布:情侣对唱网络 编辑:程序博客网 时间:2024/05/03 16:53



#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>using namespace std;double adj[250][250],dis[250];      //dis[]记录从起点到该点扣完费后剩下的最大钱数
int n,a,b;bool vis[1000];void dijkstra(){int u;for(int i=1;i<=n;++i)        //循环次数为全部顶点数n{double MAX=-1.0;for(int j=1;j<=n;++j){if(!vis[j]&&dis[j]>MAX){u=j;MAX=dis[j];}}vis[u]=1;if(u==b)    {printf("%.2f\n",dis[b]);break;}for(int j=1;j<=n;++j){if(vis[j]==0&&dis[j]<dis[u]*(1-adj[u][j])){dis[j]=dis[u]*(1-adj[u][j]);}}}}int main(){int t;cin>>t;while(t--){cin>>n>>a>>b;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>adj[i][j];memset(dis,0,sizeof(dis));dis[a]=1;memset(vis,0,sizeof(vis));dijkstra();}return 0;}