和poj2253差不多,都是要邊權最大值最小
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstring>
using namespace std;
#define f first
#define s second
typedef long long LL;
typedef pair<int,int> PII;
typedef pair<LL,LL> PLL;
const int N = 1e3 + 10 ;
const int M = 1e6 + 10 ;
int inq[N],d[N];
int h[N],to[M*2],nt[M*2],cnt,cost[M*2];
int n,m,a,b,c,t,cas;
void add(int u,int v,int c){
to[++cnt] = v;
cost[cnt] = c;
nt[cnt] = h[u];
h[u] = cnt;
}
void spfa(){
memset(d,0,sizeof(d));
memset(inq,0,sizeof(inq));
d[1] = 1e9;
queue<int> q;
q.push(1);
while(!q.empty()){
int u = q.front();
q.pop();
inq[u] = 0 ;
for(int i = h[u] ; i ; i = nt[i]){
int t = to[i];
int di = cost[i];
if(d[t] < min(di,d[u])){
d[t] = min(di,d[u]);
if(!inq[t]){
inq[t] = 1;
q.push(t);
}
}
}
}
}
int main(){
//ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
cnt = 0 ;
memset(h,0,sizeof(h));
for(int i = 0 ; i < m;i ++){
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
add(b,a,c);
}
spfa();
printf("Scenario #%d:\n%d\n\n",++cas,d[n]);
}
return 0;
}