#include<bits/stdc++.h>
using namespace std;
struct node{
int cst,vex;
bool operator < (const node & tmp) const{
return cst > tmp.cst;
}
};
const int MAXN = 10005,MAXM = 20005,INF = 0x3f3f3f3f;
int h[MAXN],e[MAXM],w[MAXM],ne[MAXM],idx;
int n,m,st,ed,dst[MAXN]; //dst[i]表示从起点到达i结点路径的最大值
bool vst[MAXN];
priority_queue<node> que;
void add(int x,int y,int z){
ne[idx] = h[x];e[idx] = y;w[idx] = z;h[x] = idx++;
}
void init(){
//初始化
idx = 0;
memset(h,-1,sizeof(h));
//输入
cin>>n>>m>>st>>ed;
for(int i=1;i<=m;i++){
int x,y,z;cin>>x>>y>>z;
add(x,y,z);add(y,x,z);
}
cout<<idx<<endl;
return;
}
void dijkstra(node u){
//初始化
for(int i=1;i<=n;i++) dst[i] = INF;
dst[u.vex] = 0;
que.push(u);
//松弛,或选中间点
while(!que.empty()){
//找最小
node cur = que.top();que.pop();
if(vst[cur.vex]) continue;
vst[cur.vex]=true;
//借东风
for(int i=h[cur.vex];i!=-1;i=ne[i]){
int to = e[i];
if(dst[to] < max(dst[cur.vex],w[i])) continue;
dst[to] = max(dst[cur.vex],w[i]);
que.push((node){dst[to],to});
}
}
}
int main(){
freopen("P1396_10.in","r",stdin);
init();
node u;u.cst = 0,u.vex = st;
dijkstra(u);
cout<<dst[ed];
return 0;
}
当idx到20005的时候就自己变成了0