おしりたんていの絵本を借りてみた。 1 冊目から完成度が高い……。
『カーズ/クロスロード』を観た。
bouzuya/kireta で Firestore の Path っぽいものを追加したり、 crates:serde-firestore-value を試したりした。使いやすくなってきた。
ABC187 : AtCoder Beginner Contest 187
- E - Through Path
https://atcoder.jp/contests/abc187/tasks/abc187_e
- 提出: https://atcoder.jp/contests/abc187/submissions/47186203
- 解説 AC
- 根付き木で「ある頂点の子孫以外に x を加算」をどうすればいいか思いつかず
- 根の子孫に x を加算してある頂点の子孫に -x を加算すればよかった
- 親側・子側で混乱する
use std::collections::VecDeque; use proconio::{input, marker::Usize1}; fn main() { input! { n: usize, 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 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); } }
今日のコミット。
- kireta 10 commits
- Extract infra::firestore::client mod
- Remove project_id and database_id from firestore client
- Add infra::firestore::timestamp mod
- Fix to use Path
- Add RootPath::new
- Add impl FromStr for {Collection,Document,Root}Path
- Add infra::firestore::path mod
- Change firestore client list method signature
- Add infra::firestore::document mod
- Use serde-firestore-value for parameters
- rust-atcoder 1 commit