#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct Edge { int to; int w; };
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
if(!(cin >> N >> M)) return 0;
vector<vector<Edge>> adj(N+1);
for (int i = 0; i < M; ++i) {
int u,v,w; cin >> u >> v >> w;
adj[u].push_back({v,w});
adj[v].push_back({u,w});
}
// 이웃 정점 번호 오름차순 정렬 (BFS 타이브레이크)
for (int u = 1; u <= N; ++u) {
sort(adj[u].begin(), adj[u].end(),
[](const Edge& a, const Edge& b){ return a.to < b.to; });
}
// 1) BFS로 트리 구성, 방문 순서 기록
vector<int> order; order.reserve(N);
vector<int> parent(N+1, 0), depth(N+1, 0);
vector<ll> distw(N+1, 0); // 루트(1)까지의 누적 가중치
vector<char> vis(N+1, 0);
queue<int> q;
vis[1] = 1; parent[1] = 0; depth[1] = 0; distw[1] = 0;
q.push(1);
while (!q.empty()) {
int u = q.front(); q.pop();
order.push_back(u);
for (auto [v, w] : adj[u]) {
if (!vis[v]) {
vis[v] = 1;
parent[v] = u;
depth[v] = depth[u] + 1;
distw[v] = distw[u] + w; // 트리 간선 가중치 누적
q.push(v);
}
}
}
// 2) LCA 준비 (binary lifting)
int LOG = 1;
while ((1<<LOG) <= N) ++LOG;
vector<vector<int>> up(LOG, vector<int>(N+1, 0));
up[0] = parent;
for (int k = 1; k < LOG; ++k) {
for (int v = 1; v <= N; ++v) {
int mid = up[k-1][v];
up[k][v] = (mid ? up[k-1][mid] : 0);
}
}
auto lca = [&](int a, int b){
if (depth[a] < depth[b]) swap(a,b);
int diff = depth[a] - depth[b];
for (int k = 0; k < LOG; ++k)
if (diff & (1<<k)) a = up[k][a];
if (a == b) return a;
for (int k = LOG-1; k >= 0; --k) {
if (up[k][a] != up[k][b]) {
a = up[k][a];
b = up[k][b];
}
}
return parent[a];
};
auto distT = [&](int a, int b)->ll{
int c = lca(a,b);
return distw[a] + distw[b] - 2LL*distw[c];
};
// 3) 합 계산
ll ans = 0;
for (int i = 0; i+1 < (int)order.size(); ++i) {
ans += distT(order[i], order[i+1]);
}
ans += distT(order.back(), 1); // 마지막에서 1번으로 복귀
cout << ans << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKc3RydWN0IEVkZ2UgeyBpbnQgdG87IGludCB3OyB9OwoKaW50IG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwogICAgaW50IE4sIE07CiAgICBpZighKGNpbiA+PiBOID4+IE0pKSByZXR1cm4gMDsKCiAgICB2ZWN0b3I8dmVjdG9yPEVkZ2U+PiBhZGooTisxKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTTsgKytpKSB7CiAgICAgICAgaW50IHUsdix3OyBjaW4gPj4gdSA+PiB2ID4+IHc7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh7dix3fSk7CiAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh7dSx3fSk7CiAgICB9CiAgICAvLyDsnbTsm4Mg7KCV7KCQIOuyiO2YuCDsmKTrpoTssKjsiJwg7KCV66CsIChCRlMg7YOA7J2067iM66CI7J207YGsKQogICAgZm9yIChpbnQgdSA9IDE7IHUgPD0gTjsgKyt1KSB7CiAgICAgICAgc29ydChhZGpbdV0uYmVnaW4oKSwgYWRqW3VdLmVuZCgpLAogICAgICAgICAgICAgW10oY29uc3QgRWRnZSYgYSwgY29uc3QgRWRnZSYgYil7IHJldHVybiBhLnRvIDwgYi50bzsgfSk7CiAgICB9CgogICAgLy8gMSkgQkZT66GcIO2KuOumrCDqtazshLEsIOuwqeusuCDsiJzshJwg6riw66GdCiAgICB2ZWN0b3I8aW50PiBvcmRlcjsgb3JkZXIucmVzZXJ2ZShOKTsKICAgIHZlY3RvcjxpbnQ+IHBhcmVudChOKzEsIDApLCBkZXB0aChOKzEsIDApOwogICAgdmVjdG9yPGxsPiBkaXN0dyhOKzEsIDApOyAgICAgICAgICAgLy8g66Oo7Yq4KDEp6rmM7KeA7J2YIOuIhOyggSDqsIDspJHsuZgKICAgIHZlY3RvcjxjaGFyPiB2aXMoTisxLCAwKTsKCiAgICBxdWV1ZTxpbnQ+IHE7CiAgICB2aXNbMV0gPSAxOyBwYXJlbnRbMV0gPSAwOyBkZXB0aFsxXSA9IDA7IGRpc3R3WzFdID0gMDsKICAgIHEucHVzaCgxKTsKCiAgICB3aGlsZSAoIXEuZW1wdHkoKSkgewogICAgICAgIGludCB1ID0gcS5mcm9udCgpOyBxLnBvcCgpOwogICAgICAgIG9yZGVyLnB1c2hfYmFjayh1KTsKICAgICAgICBmb3IgKGF1dG8gW3YsIHddIDogYWRqW3VdKSB7CiAgICAgICAgICAgIGlmICghdmlzW3ZdKSB7CiAgICAgICAgICAgICAgICB2aXNbdl0gPSAxOwogICAgICAgICAgICAgICAgcGFyZW50W3ZdID0gdTsKICAgICAgICAgICAgICAgIGRlcHRoW3ZdID0gZGVwdGhbdV0gKyAxOwogICAgICAgICAgICAgICAgZGlzdHdbdl0gPSBkaXN0d1t1XSArIHc7IC8vIO2KuOumrCDqsITshKAg6rCA7KSR7LmYIOuIhOyggQogICAgICAgICAgICAgICAgcS5wdXNoKHYpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8vIDIpIExDQSDspIDruYQgKGJpbmFyeSBsaWZ0aW5nKQogICAgaW50IExPRyA9IDE7CiAgICB3aGlsZSAoKDE8PExPRykgPD0gTikgKytMT0c7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IHVwKExPRywgdmVjdG9yPGludD4oTisxLCAwKSk7CiAgICB1cFswXSA9IHBhcmVudDsKICAgIGZvciAoaW50IGsgPSAxOyBrIDwgTE9HOyArK2spIHsKICAgICAgICBmb3IgKGludCB2ID0gMTsgdiA8PSBOOyArK3YpIHsKICAgICAgICAgICAgaW50IG1pZCA9IHVwW2stMV1bdl07CiAgICAgICAgICAgIHVwW2tdW3ZdID0gKG1pZCA/IHVwW2stMV1bbWlkXSA6IDApOwogICAgICAgIH0KICAgIH0KCiAgICBhdXRvIGxjYSA9IFsmXShpbnQgYSwgaW50IGIpewogICAgICAgIGlmIChkZXB0aFthXSA8IGRlcHRoW2JdKSBzd2FwKGEsYik7CiAgICAgICAgaW50IGRpZmYgPSBkZXB0aFthXSAtIGRlcHRoW2JdOwogICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgTE9HOyArK2spCiAgICAgICAgICAgIGlmIChkaWZmICYgKDE8PGspKSBhID0gdXBba11bYV07CiAgICAgICAgaWYgKGEgPT0gYikgcmV0dXJuIGE7CiAgICAgICAgZm9yIChpbnQgayA9IExPRy0xOyBrID49IDA7IC0taykgewogICAgICAgICAgICBpZiAodXBba11bYV0gIT0gdXBba11bYl0pIHsKICAgICAgICAgICAgICAgIGEgPSB1cFtrXVthXTsKICAgICAgICAgICAgICAgIGIgPSB1cFtrXVtiXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFyZW50W2FdOwogICAgfTsKCiAgICBhdXRvIGRpc3RUID0gWyZdKGludCBhLCBpbnQgYiktPmxsewogICAgICAgIGludCBjID0gbGNhKGEsYik7CiAgICAgICAgcmV0dXJuIGRpc3R3W2FdICsgZGlzdHdbYl0gLSAyTEwqZGlzdHdbY107CiAgICB9OwoKICAgIC8vIDMpIO2VqSDqs4TsgrAKICAgIGxsIGFucyA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSsxIDwgKGludClvcmRlci5zaXplKCk7ICsraSkgewogICAgICAgIGFucyArPSBkaXN0VChvcmRlcltpXSwgb3JkZXJbaSsxXSk7CiAgICB9CiAgICBhbnMgKz0gZGlzdFQob3JkZXIuYmFjaygpLCAxKTsgLy8g66eI7KeA66eJ7JeQ7IScIDHrsojsnLzroZwg67O16reACgogICAgY291dCA8PCBhbnMgPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9