Heavy Cargo 最短路变种
来源:互联网 发布:中文域名的作用 编辑:程序博客网 时间:2024/06/05 22:45
/*就是求所有边中最小边的最大值。相对应的就是求所有边中最大边的最小值,就是frogger。该题的转移方程就是:dist[j]=max(dist[j],min(dist[k],map[k][j]));*/#include <stdio.h>#include <string>#include <iostream>#include <cstring>#include <map>#define inf 99999999using namespace std;int edge[201][201];int dist[201];bool vis[201];int main(){ map<string,int> v; int n,m,c,u,vv,s,e,k; string a,b; int ca=1; while(scanf("%d%d",&n,&m)==2&&(n+m)) { v.clear(); memset(vis,false,sizeof(vis)); memset(edge,0,sizeof(edge)); memset(dist,0,sizeof(dist)); int cnt=1; while(m--) { cin >> a >> b >> c; if(v[a]==0) v[a]=cnt++; if(v[b]==0) v[b]=cnt++; u=v[a]; vv=v[b]; edge[u][vv]=edge[vv][u]=c; } cin >> a >> b; s=v[a]; e=v[b]; dist[s]=inf; for(int i=1;i<=cnt;i++) { int m=0; for(int j=1;j<=cnt;j++) { if(dist[j]>m&&!vis[j]) { k=j; m=dist[j]; } } vis[k]=true; for(int j=1;j<=cnt;j++) { if(!vis[j]&&edge[k][j]>0) dist[j]=max(dist[j],min(dist[k],edge[k][j])); } } printf("Scenario #%d\n",ca++); printf("%d tons\n\n",dist[e]); } return 0;}