两遍dfs
#include<bits/stdc++.h>
using namespace std;
struct node{
int v,w;
node(int vv,int ww) {
v = vv;
w = ww;
return;
}
};
int n,m,ut,vt,wt,s,t,maxn = 0;
long long ans,dis[1010];
vector<node> g[1010];
void dfs(int u,int fa) {
for (int i = 0;i < g[u].size();i ++) {
int v = g[u][i].v,w = g[u][i].w;
if (v != fa) {
dfs(v,u);
dis[v] = min(dis[v],dis[u] + w);
if (maxn < dis[v]) {
maxn = dis[v];
t = v;
}
}
}
return;
}
int main() {
scanf("%d%d",&n,&m);
for (int i = 1;i <= m;i ++) {
scanf("%d%d%d",&ut,&vt,&wt);
g[ut].push_back(node(vt,wt));
g[vt].push_back(node(ut,wt));
}
memset(dis,0x3f,sizeof(dis));
dis[1] = 0;
dfs(1,0);
s = t;
maxn = 0;
memset(dis,0x3f,sizeof(dis));
dis[s] = 0;
dfs(s,0);
printf("%lld\n",dis[t]);
return 0;
}