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; }