#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int N = 10005;
struct Edge {
int v, w;
Edge(int _v, int _w) {
v = _v, w = _w;
}
};
int n, m, s, t;
int vis[N], maxv[N];
vector<Edge> p[N];
void dijkstra() {
memset(maxv, 0x3f, sizeof maxv);
maxv[s] = 0;
for(int i = 0; i < n; i ++) {
int k = -1;
for(int j = 1; j <= n; j ++)
if(!vis[j] && (k == -1 || maxv[j] < maxv[k]))
k = j;
vis[k] = 1;
for(int j = 0, siz = p[k].size(); j < siz; j ++) {
int v = p[k][j].v, w = p[k][j].w;
if(maxv[k] == 0) maxv[v] = w;
else maxv[v] = min(maxv[v], maxv[k]);
}
}
}
int main() {
scanf("%d%d%d%d", &n, &m, &s, &t);
for(int i = 0; i < m; i ++) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
p[u].push_back(Edge(v, w));
p[v].push_back(Edge(u, w));
}
dijkstra();
printf("%d", maxv[t]);
return 0;
}
就是把长度相加换成了取最大值而已