hdu 1596 find the safest road (最短路)
来源:互联网 发布:ae cc 2014 mac 破解 编辑:程序博客网 时间:2024/05/18 01:16
/*floyd直接水过*/#include<cstdio>#include<cstring>#include<iostream>#define N 1001using namespace std;int n,x,y;double road[N][N],t;int main(){ while(scanf("%d",&n)!=EOF) { memset(road,0,sizeof(road)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%lf",&t); if(t>road[i][j]) { road[i][j]=t; road[j][i]=t; } } } for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { if(road[i][k]) for(int j=1;j<=n;j++) { if(road[i][j]<road[i][k]*road[k][j]) { road[i][j]=road[i][k]*road[k][j]; } } } } scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&x,&y); if(road[x][y]!=0) printf("%.3lf\n",road[x][y]); else printf("What a pity!\n"); } }}/*spfa*/#include<iostream>#include<cstring>#include<cstdio>#include<queue>using namespace std;double map[1001][1001],dis[1001];int visit[1001],s,e,n;void SPFA(int s){ int p,i; queue<int> qu; qu.push(s); visit[s]=1; dis[s]=1; while(!qu.empty()) { p=qu.front(); qu.pop(); visit[p]=0; for(i=1;i<=n;i++) { if(map[p][i]==0||p==i) continue; if(dis[p]*map[p][i]>dis[i]) { dis[i]=dis[p]*map[p][i]; if(visit[i]==0) { visit[i]=1; qu.push(i); } } } }}int main(){ freopen("test.txt","r",stdin); int i,j,m; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { scanf("%lf",&map[i][j]); } } scanf("%d",&m); while(m--) { scanf("%d%d",&s,&e); for(i=1;i<=n;i++) { visit[i]=0; dis[i]=0; } SPFA(s); if(dis[e]!=0) printf("%.3lf\n",dis[e]); else puts("What a pity!"); } } return 0;}