From ed1d9924d80b4748e79ffb70d968932e129fef3f Mon Sep 17 00:00:00 2001 From: bouzuya Date: Fri, 3 Nov 2023 23:46:55 +0900 Subject: [PATCH] abc187 e --- .../contests/abc187/src/bin/e.rs | 65 ++++++++++++++++++- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/cargo-atcoder-1.70.0/contests/abc187/src/bin/e.rs b/cargo-atcoder-1.70.0/contests/abc187/src/bin/e.rs index 2a9506c8..602630f7 100644 --- a/cargo-atcoder-1.70.0/contests/abc187/src/bin/e.rs +++ b/cargo-atcoder-1.70.0/contests/abc187/src/bin/e.rs @@ -1,10 +1,69 @@ +use std::collections::VecDeque; + use proconio::{input, marker::Usize1}; fn main() { input! { n: usize, - a: [Usize1; n], + ab: [(Usize1, Usize1); n - 1], + q: usize, + tex: [(usize, Usize1, i64); q], + } + + let mut edges = vec![vec![]; n]; + for (a, b) in ab.iter().copied() { + edges[a].push(b); + edges[b].push(a); + } + + let depth = { + let inf = n + 1; + let mut depth = vec![inf; n]; + let mut q = VecDeque::new(); + depth[0] = 0; + q.push_back(0); + while let Some(u) = q.pop_front() { + for v in edges[u].iter().copied() { + if depth[v] != inf { + continue; + } + depth[v] = depth[u] + 1; + q.push_back(v); + } + } + depth }; - let ans = n - a.len(); - println!("{}", ans); + + let mut c = vec![0_i64; n]; + + for (t, e, x) in tex { + let (a, b) = ab[e]; + let (p, u) = if depth[a] < depth[b] { + (t == 1, b) + } else { + (t == 2, a) + }; + if p { + c[0] += x; + c[u] -= x; + } else { + c[u] += x; + } + } + + let mut q = VecDeque::new(); + q.push_back(0); + while let Some(u) = q.pop_front() { + for v in edges[u].iter().copied() { + if depth[v] <= depth[u] { + continue; + } + c[v] += c[u]; + q.push_back(v); + } + } + + for c_i in c { + println!("{}", c_i); + } }