Poj 2263 Heavy Cargo Floyd 求最大容量路

f[i][j] = max(f[i][j],min(f[i][k],f[j][k]))

 

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <climits>
#include <string>
#include <iostream>
#include <map>
#include <cstdlib>
#include <list>
#include <set>
#include <queue>
#include <stack>

using namespace std;

typedef long long LL;
const int maxn = 205;
const int INF = INT_MAX / 4;
map<string,int> mp;
int d[maxn][maxn],n,m;
string a,b;

int id(string &s) {
    int now = mp.size();
    if(mp.count(s) == 0) mp[s] = now + 1;
    return mp[s];
}

int main() {
    int kase = 1;
    while(cin >> n >> m,n) {
        mp.clear();
        int dist;
        for(int i = 1;i <= n;i++) {
            for(int j = 1;j <= n;j++) {
                d[i][j] = -1;
            }
        }
        for(int i = 1;i <= m;i++) {
            cin >> a >> b >> dist;
            d[id(a)][id(b)] = d[id(b)][id(a)] = dist;
        }
        for(int k = 1;k <= n;k++) {
            for(int i = 1;i <= n;i++) {
                for(int j = 1;j <= n;j++) {
                    d[i][j] = max(d[i][j],
                            min(d[i][k],d[j][k]));
                }
            }
        }
        cin >> a >> b;
        cout << "Scenario #" << kase++ << endl;
        cout << d[id(a)][id(b)] << " " << "tons" << endl;
        cout << endl;
    }
    return 0;
}
posted @ 2014-07-20 20:41  acm_roll  阅读(157)  评论(0编辑  收藏  举报