Dijsktra + 贪心:
// ShellDawn
// POJ2263
// No.14
#include<algorithm>
#include<cstring>
#include<iostream>
#include<map>
#include<cstdio>
#define MM(x) memset(x,0,sizeof(x))
#define MMF(x) memset(x,0x3f,sizeof(x));
#define INF 0x3f3f3f3f
using namespace std;
#define maxn 200
int n,m;
int E[maxn][maxn];
map<string,int> mp;
int mc = 1;
int visited[maxn];
int ans[maxn];
void Dijsktra(int x,int y){
MM(visited);
MM(ans);
for(int i=1;i<=n;i++) ans[i] = E[x][i];
visited[x] = 1;
for(int i=0;i<n-1;i++){
int v = -1;
int z = 0;
for(int j=1;j<=n;j++){
if(visited[j] == 0 && ans[j] > v){
v = ans[j];
z = j;
}
}
if(z == y){
cout<<ans[y]<<" tons"<<endl;
return ;
}
visited[z] = 1;
for(int j=1;j<=n;j++){
ans[j] = max(ans[j],min(ans[z],E[z][j]));
}
}
}
int main(){
int T = 1;
while(cin>>n>>m&&n){
if(T!=1) puts("");
cout<<"Scenario #"<<T++<<endl;
mp.clear();
mc = 1;
MM(E);
for(int i=0;i<n;i++) E[i][i] = 0;
string s1,s2;
int v;
for(int i=0;i<m;i++){
cin>>s1>>s2>>v;
if(mp[s1]==0) mp[s1] = mc++;
if(mp[s2]==0) mp[s2] = mc++;
int a = mp[s1];
int b = mp[s2];
E[a][b] = E[b][a] = max(E[a][b],v);
}
cin>>s1>>s2;
Dijsktra(mp[s1],mp[s2]);
}
return 0;
}