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


原创粉丝点击