#include #include #include #include using namespace std; typedef long long LL; typedef pair PII; const int N = 26, M = 2010; const LL INF = 0x3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f; bool st[N]; queue q; LL g[N][N], ans; int n, m, h[N], e[M], ne[M], w[M], idx; void Add(int x, int y, int z) { e[idx] = y, w[idx] = z, ne[idx] = h[x], h[x] = idx++; } void Floyd() { for (int k = 0; k < N; ++k) { for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { g[i][j] = min(g[i][j], g[i][k] + g[k][j]); } } } } int main() { // freopen("ticket.in", "r", stdin); // freopen("ticket.out", "w", stdout); scanf("%d%d", &n, &m); memset(h, -1, sizeof(h)); memset(g, 0x3f, sizeof(g)); for (int i = 1; i <= n; ++i) g[i][i] = 0; for (int i = 1, a, b, c; i <= m; ++i) { scanf("%d%d%d", &a, &b, &c); Add(a, b, c); Add(b, a, c); g[a][b] = g[b][a] = c; } Floyd(); for (int i = 1; i <= n; ++i) { if (!st[i]) { st[i] = true; int p1 = 0, ma = 0; for (int j = 1; j <= n; ++j) { if (g[i][j] < INF) st[j] = true; if (ma < g[i][j]) { ma = g[i][j]; p1 = j; } } int p2 = 0; ma = 0; for (int j = 1; j <= n; ++j) { if (ma < g[p1][j]) { ma = g[p1][j]; p2 = j; } } ans = max(ans, g[p1][p2]); } } printf("%lld\n", ans); return 0; }