2263 Heavy Cargo
http://poj.org/problem?id=2263
概要
出発点から目的地までのパスの中で、パスの最小容量の辺の容量が最大になるようなパスを見つける問題。
ただ少し入力が面倒。
ソース
#include<iostream> #include<cstring> #include<string> #include<map> using namespace std; #define REP(i,a,b) for(i=a; i<b; ++i) #define rep(i,n) REP(i,0,n) int cap[200][200]; int n; int main() { int scenum = 1,r,i,j,k,a; string s,t; while(cin>>n>>r, n|r) { map<string,int> idx; memset(cap, 0, sizeof(cap)); rep(i,r) { cin>>s>>t>>a; if(idx.find(s) == idx.end()) idx[s] = idx.size()-1; if(idx.find(t) == idx.end()) idx[t] = idx.size()-1; cap[idx[s]][idx[t]] = cap[idx[t]][idx[s]] = a; } rep(k,n) rep(i,n) rep(j,n) cap[i][j] = max(cap[i][j], min(cap[i][k], cap[k][j])); cin>>s>>t; cout<<"Scenario #"<<scenum<<endl; cout<<cap[idx[s]][idx[t]]<<" tons"<<endl; cout<<endl; scenum++; } }