题目大意:给一张无向图,边权为正整数,代表两端点之间路上能承载的最大重量,给定一个起点和一个终点,问起点到终点最大载货量。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <stack>
using namespace std;
const int inf=0x3f3f3f3f;
map<string,int> m;
int n,r,dis,tot;
int d[210],w[210][210];
bool vis[210];
char s[40],t[40];
void dijkstra(int x){
memset(vis,0,sizeof(vis));
for(int i=0;i<=n;i++)
d[i]=0;
d[x]=inf;
for(int i=1;i<=n;i++){
int x,m=0;
for(int y=1;y<=n;y++) if(!vis[y]&&m<d[y]) m=d[x=y];
vis[x]=1;
for(int y=1;y<=n;y++)
d[y]=max(min(d[x],w[x][y]),d[y]);
}
}
int main()
{
//freopen("in","r",stdin);
int test=1;
while(cin>>n>>r,n|r){
tot=1;
memset(w,0,sizeof(w));
for(int i=0;i<=n;i++)
w[i][i]=inf;
for(int i=0;i<r;i++){
scanf(" %s %s %d",s,t,&dis);
if(!m[s])
m[s]=tot++;
if(!m[t])
m[t]=tot++;
int x=m[s],y=m[t];
w[x][y]=w[y][x]=dis;
}
scanf(" %s %s",s,t);
int x=m[s],y=m[t];
dijkstra(x);
cout<<"Scenario #"<<test++<<endl;
cout<<d[y]<<" "<<"tons"<<endl<<endl;
}
return 0;
}