Use this to learn the idea, then write your own version.
1package main2 3import (4 "bufio"5 . "fmt"6 "io"7)8 910func CF587C(_r io.Reader, _w io.Writer) {11 in := bufio.NewReader(_r)12 out := bufio.NewWriter(_w)13 defer out.Flush()14 k := 1015 merge := func(a, b []int) []int {16 i, n := 0, len(a)17 j, m := 0, len(b)18 c := make([]int, 0, n+m)19 for {20 if i == n {21 c = append(c, b[j:]...)22 break23 }24 if j == m {25 c = append(c, a[i:]...)26 break27 }28 if a[i] < b[j] {29 c = append(c, a[i])30 i++31 } else {32 c = append(c, b[j])33 j++34 }35 }36 if len(c) > k {37 c = c[:k]38 }39 return c40 }41 42 var n, m, q, v, w int43 Fscan(in, &n, &m, &q)44 g := make([][]int, n)45 for i := 1; i < n; i++ {46 Fscan(in, &v, &w)47 v--48 w--49 g[v] = append(g[v], w)50 g[w] = append(g[w], v)51 }52 const mx = 1753 type pair struct {54 p int55 mins []int56 }57 pa := make([][mx]pair, n)58 for i := 1; i <= m; i++ {59 Fscan(in, &v)60 if v--; len(pa[v][0].mins) < 10 {61 pa[v][0].mins = append(pa[v][0].mins, i)62 }63 }64 dep := make([]int, n)65 var f func(v, p, d int)66 f = func(v, p, d int) {67 pa[v][0].p = p68 dep[v] = d69 for _, w := range g[v] {70 if w != p {71 f(w, v, d+1)72 }73 }74 }75 f(0, -1, 0)76 for i := 0; i+1 < mx; i++ {77 for v := range pa {78 if p := pa[v][i]; p.p != -1 {79 pp := pa[p.p][i]80 pa[v][i+1] = pair{pp.p, merge(p.mins, pp.mins)}81 } else {82 pa[v][i+1] = pair{p: -1}83 }84 }85 }86 87 for ; q > 0; q-- {88 Fscan(in, &v, &w, &k)89 v--90 w--91 if dep[v] > dep[w] {92 v, w = w, v93 }94 mins := []int{}95 for i := 0; i < mx; i++ {96 if (dep[w]-dep[v])>>i&1 > 0 {97 p := pa[w][i]98 mins = merge(mins, p.mins)99 w = p.p100 }101 }102 if w != v {103 for i := mx - 1; i >= 0; i-- {104 if pv, pw := pa[v][i], pa[w][i]; pv.p != pw.p {105 mins = merge(mins, merge(pv.mins, pw.mins))106 v, w = pv.p, pw.p107 }108 }109 mins = merge(mins, merge(pa[v][0].mins, pa[w][0].mins))110 v = pa[v][0].p111 }112 mins = merge(mins, pa[v][0].mins)113 Fprint(out, len(mins))114 for _, v := range mins {115 Fprint(out, " ", v)116 }117 Fprintln(out)118 }119}120 121122