package main import . "fmt" func main() { var n,m int Scan(&n,&m) fw := make([][]int, n) for i := range fw { fw[i] = make([]int, n) for j := range fw[i] { if i != j { fw[i][j] = 1e18 } } } for i := 0; i < m; i++ { var s,t,d int Scan(&s,&t,&d) fw[s-1][t-1] = min(fw[s-1][t-1], d) } for i := 0; i < n; i++ { for j := 0; j < n; j++ { for k := 0; k < n; k++ { if fw[j][i] + fw[i][k] < fw[j][k] { fw[j][k] = fw[j][i] + fw[i][k] } } } } for _, list := range fw { sum := 0 for _, value := range list { if value < 1e18 { sum += value } } Println(sum) } } /* 考察 フロイドワーシャルのアルゴリズムで解く問題のように見える WAした、なぜだかわからない サンプルに多重辺について言及がある それか? */