Use this to learn the idea, then write your own version.
1package main2 3import (4 "bufio"5 . "fmt"6 "io"7 "sort"8)9 1011func CF609E(_r io.Reader, _w io.Writer) {12 in := bufio.NewReader(_r)13 out := bufio.NewWriter(_w)14 defer out.Flush()15 max := func(a, b int) int {16 if a > b {17 return a18 }19 return b20 }21 22 var n, m, v, w, wt int23 Fscan(in, &n, &m)24 type edge struct{ v, w, wt, i int }25 es := make([]edge, m)26 for i := range es {27 Fscan(in, &v, &w, &wt)28 es[i] = edge{v - 1, w - 1, wt, i}29 }30 sort.Slice(es, func(i, j int) bool { return es[i].wt < es[j].wt })31 32 fa := make([]int, n)33 for i := range fa {34 fa[i] = i35 }36 var find func(int) int37 find = func(x int) int {38 if fa[x] != x {39 fa[x] = find(fa[x])40 }41 return fa[x]42 }43 s := int64(0)44 type nb struct{ to, wt int }45 g := make([][]nb, n)46 for i, e := range es {47 v, w, wt := e.v, e.w, e.wt48 if fv, fw := find(v), find(w); fv != fw {49 s += int64(wt)50 fa[fv] = fw51 g[v] = append(g[v], nb{w, wt})52 g[w] = append(g[w], nb{v, wt})53 es[i].wt = 054 }55 }56 57 const mx = 1858 type pair struct{ p, max int }59 pa := make([][mx]pair, n)60 dep := make([]int, n)61 var f func(v, p, d int)62 f = func(v, p, d int) {63 pa[v][0].p = p64 dep[v] = d65 for _, e := range g[v] {66 if w := e.to; w != p {67 pa[w][0].max = e.wt68 f(w, v, d+1)69 }70 }71 }72 f(0, -1, 0)73 for i := 0; i+1 < mx; i++ {74 for v := range pa {75 if p := pa[v][i]; p.p != -1 {76 pp := pa[p.p][i]77 pa[v][i+1] = pair{pp.p, max(p.max, pp.max)}78 } else {79 pa[v][i+1] = pair{-1, 0}80 }81 }82 }83 maxWt := func(v, w int) (res int) {84 if dep[v] > dep[w] {85 v, w = w, v86 }87 for i := 0; i < mx; i++ {88 if (dep[w]-dep[v])>>i&1 > 0 {89 p := pa[w][i]90 w = p.p91 res = max(res, p.max)92 }93 }94 if v == w {95 return96 }97 for i := mx - 1; i >= 0; i-- {98 if p, q := pa[v][i], pa[w][i]; p.p != q.p {99 v, w = p.p, q.p100 res = max(res, max(p.max, q.max))101 }102 }103 return max(res, max(pa[v][0].max, pa[w][0].max))104 }105 106 ans := make([]int64, m)107 for _, e := range es {108 if e.wt > 0 {109 ans[e.i] = int64(e.wt - maxWt(e.v, e.w))110 }111 }112 for _, v := range ans {113 Fprintln(out, s+v)114 }115}116 117118