ZOJ 1655 Transport Goods 【最短路】【Dijkstra】

来源:互联网 发布:手机游戏网站源码 编辑:程序博客网 时间:2024/05/17 17:59
//2632380 2011-08-19 09:58:14 Accepted 1655 C 10 160 ylwh@Unknown#include <stdio.h>#define N 101int main(){int n, m, staue[N][N], a, b;int i, j, k, flag[N], now;double map[N][N], d[N], w[N], c, ans;while(scanf("%d%d", &n, &m) != EOF){ans = 0;for(i=1; i<n; i++){scanf("%lf", &w[i]);map[i][i] = -1;staue[i][i] = 0;d[i] = 0;flag[i] = 0;for(j=i+1; j<=n; j++){map[i][j] =map[j][i] = -1;staue[i][j] = staue[j][i] = 0;}}map[n][n] = -1;staue[n][n] = 0;d[n] = 1;for(i=1; i<=m; i++){scanf("%d%d%lf", &a, &b, &c);if(1 - c > map[a][b])map[a][b] = map[b][a] = 1 - c;staue[a][b] = staue[b][a] = 1;}now = n;flag[n] = 1;for(i=1; i<n; i++){for(j=1; j<n; j++)if(staue[now][j] && !flag[j] && d[j] < d[now] * map[now][j] )d[j] = d[now] * map[now][j];c = 0;for(j=1; j<n; j++)if( !flag[j] && d[j] >= c){c = d[j];now = j;}flag[now] = 1;}for(i=1; i<n; i++)ans += d[i] * w[i];printf("%.2lf\n", ans);}    return 0;}