题目链接
题意
一个有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;
}