こんにちは、ナナオです。

前回に引き続き競プロを実施していきたいと思います。

今回の問題は以下です。

りんご拾い(情報を持ちながらの移動) | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】

実装

以下のように実装しました。

package main
import "fmt"
func main(){
    var n int
    fmt.Scan(&n)
    g := make([][]int, n)
    for i := 0; i < n; i++ {
        g[i] = make([]int, n)
    }
    for i := 1; i < n; i++ {
        var a, b int
        fmt.Scan(&a, &b)
        g[a - 1][b - 1] = 1
        g[b - 1][a - 1] = 1
    }
    for i := 0; i < n; i++ {
        var k int
        fmt.Scan(&k)
        for j := 0; j < n; j++ {
            if g[i][j] == 1 {
                g[i][j] = k
            }
        }
    }
    index := 0
    sum := 0
    for i := 0; i < n; i++ {
        for j := 0; j < n; j++ {
            if g[index][j] > 0 {
                sum += g[index][j]
                if i < n - 2 {
                    g[j][index] = 0
                }
                index = j
                break
            }
        }
        fmt.Println(sum)
    }
}

前回のコードを少し弄れば解決しましたね。

それにしても、情報を持ちながらの移動に二次元マップを使うだけでこんなに簡単に解決できるようになるとは…面白いですね。

それでは今回はこれで👍