2023-04-24 ABC026 C を解いた
- ABC026 C - 高橋君の給料 (AtCoder Beginner Contest 026 C問題)
https://atcoder.jp/contests/abc026/tasks/abc026_c
- https://atcoder.jp/contests/abc026/submissions/40923208
- 上司を親とする木構造
- 葉から順に根へと計算していけば良い
- DFS の帰りがけ順で良い
use proconio::{input, marker::Usize1};
fn dfs(dp: &mut Vec<usize>, edges: &Vec<Vec<usize>>, u: usize) {
let mut cs = vec![];
for v in edges[u].iter().copied() {
dfs(dp, edges, v);
cs.push(dp[v]);
}
dp[u] = *cs.iter().max().unwrap_or(&0) + *cs.iter().min().unwrap_or(&0) + 1;
}
fn main() {
input! {
n: usize,
b: [Usize1; n - 1]
}
let mut edges = vec![vec![]; n];
for (i, b_i) in b.iter().copied().enumerate() {
edges[b_i].push(i + 1);
}
let mut dp = vec![0_usize; n];
dfs(&mut dp, &edges, 0);
let ans = dp[0];
println!("{}", ans);
}
今日のコミット。
- rust-atcoder 1 commit
- tsukota 1 commit