package main import ( "fmt" "math" ) func main() { var n, m, src int fmt.Scan(&n, &m, &src) adj := make([][]int, n) length := make([][]int, n) for i := range length { length[i] = make([]int, n) } for i := 0; i < m; i++ { var u, v, l int fmt.Scan(&u, &v, &l) adj[u] = append(adj[u], v) length[u][v] = l } dist, prev := bellmanFord(adj, length, src) fmt.Println(dist) fmt.Println(prev) } func bellmanFord(adj [][]int, length [][]int, src int) ([]int, []int) { n := len(adj) dist := make([]int, n) prev := make([]int, n) for i := 0; i < n; i++ { dist[i] = math.MaxInt32 prev[i] = -1 } dist[src] = 0 for updated := true; updated; updated = false { for u := range adj { for _, v := range adj[u] { if alt := dist[u] + length[u][v]; alt < dist[v] { dist[v] = alt prev[v] = u updated = true } } } } return dist, prev }