3 1 0.5 0.5 0.5 1 0.4 0.5 0.4 1 3 1 2 2 3 1 3
0.500 0.400 0.500
#include<stdio.h> #include<string.h> #include<queue> #include<algorithm> #define N 0x3f3f3f using namespace std; struct node { int u,v; double w,next; }t[1001000]; int vis[10100],head[1001000],m,n; double dis[10010]; void spfa(int v,int y) { int i,j,k; memset(vis,0,sizeof(vis)); memset(dis,0,sizeof(dis)); queue<int>q; vis[v]=1; dis[v]=1; q.push(v); while(!q.empty()) { k=q.front(); vis[k]=0; q.pop(); for(i=head[k];i!=-1;i=t[i].next) { int w=t[i].v; if(dis[w]<dis[k]*t[i].w) { dis[w]=dis[k]*t[i].w; if(!vis[w]) { vis[w]=1; q.push(w); } } } } if(dis[y]!=0) printf("%.3lf\n",dis[y]); else printf("What a pity!\n"); } int main() { int i,j,k,p; double l; while(scanf("%d",&p)!=EOF)//输入一不小心就超时了,一定要按要求的格式输入 { memset(head,-1,sizeof(head)); int flag=0; for(i=1;i<=p;i++) for(j=1;j<=p;j++) { scanf("%lf",&l); t[flag].u=i; t[flag].v=j; t[flag].w=l; t[flag].next=head[i]; head[i]=flag++; } int num,x,y; scanf("%d",&num); for(i=0;i<num;i++) { scanf("%d%d",&x,&y); spfa(x,y); } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
杭电1596find the safest road(spfa)
原文地址:http://blog.csdn.net/z8110/article/details/47803901