POJ 1797 Heavy Transportion Dijkstra变形

来源:互联网 发布:电脑怎么检查网络 编辑:程序博客网 时间:2024/06/07 11:57

题目链接

Heavy Tranportion

题意

一个有n点的无向图,求从1点到n点的可行路径的最小路段中最大得一个。

解题思路

和Frogger类似,只不过把min和max的位置调换一下,基本是一道题。

代码

#include <cstdio>#include <iostream>#include <vector>#include <queue>#include<cmath>#include <string.h>using namespace std;const int MAXN=1150;const int INF=0x3f3f3f3f;int mmap[MAXN][MAXN];int T;int V,m;bool vis[MAXN];int d[MAXN];void dijkstra(){    int m=0;    memset(vis,0,sizeof vis);    for(int i=1; i<=V; i++) d[i]=mmap[1][i];    for(int i=1; i<=V; i++)    {        int x;        m=0;        for(int y=1; y<=V; y++)        {            if(!vis[y]&&d[y]>m)            {                x=y;                m=d[y];            }        }        vis[x]=1;        for(int y=1; y<=V; y++)            d[y]=max(min(d[x],mmap[x][y]),d[y]);    }}int main(){    // cout<<INF<<endl;    //freopen("out.txt","w",stdout);    scanf("%d",&T);    int kase=0;    while(T--)    {        scanf("%d %d",&V,&m);        memset(mmap,0,sizeof mmap);        memset(d,0,sizeof d);        for(int i=1; i<=m; i++)        {            int tmp,x,y;            scanf("%d %d %d",&x,&y,&tmp);            mmap[x][y]=mmap[y][x]=tmp;        }        dijkstra();        printf("Scenario #%d:\n%d\n\n",++kase,d[V]);//        for(int i=1; i<=V; i++)//            printf("%d ",d[i]);    }    return 0;}
阅读全文
0 0
原创粉丝点击