本题跟frogger那题很像,不同是,一个是取最小的,一个是最大的,同时注意输出的换行的问题
见ac代码,
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000+10;
const int INF=100000000;
int v[maxn][maxn],dis[maxn],vis[maxn];
int n,m,t;
void dij(int x)
{
for(int i=1;i<=n;i++)
dis[i]=v[x][i];
dis[x]=0;vis[x]=1;
for(int i=1;i<n;i++)
{
int sum=-1,u=-1;
for(int j=1;j<=n;j++)
if(!vis[j]&&dis[j]>sum)
sum=dis[u=j];
vis[u]=1;
for(int j=1;j<=n;j++)
dis[j]=max(dis[j],min(dis[u],v[u][j]));
}
}
void init()
{
memset(vis,0,sizeof(vis));
memset(v,0,sizeof(v));
}
int main()
{
int a,b,c,cnt=0;
//freopen("c.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
init();
while(m--)
{
scanf("%d %d %d",&a,&b,&c);
v[a][b]=max(v[a][b],c);
v[b][a]=max(v[b][a],c);
}
dij(1);
printf("Scenario #%d:\n",++cnt);
printf("%d\n\n",dis[n]);
}
return 0;
}