bouzuya/tsukota のデータを PC からスクリプトで更新できるようにしたい。その準備として models パッケージを追加した。
- 道路の老朽化対策について (AtCoder Beginner Contest 040:D問題)
https://atcoder.jp/contests/abc040/tasks/abc040_d
- https://atcoder.jp/contests/abc040/submissions/44123471
- ある時点で使用可能な道路を Dsu で管理する
- Dsu は連結はできても分割はできないので年の新しい順 (降順) で道路を追加していく
- 国民についても合わせて並べて調べれば良い
use dsu::*; use proconio::{input, marker::Usize1}; fn main() { input! { n: usize, m: usize, aby: [(Usize1, Usize1, usize); m], q: usize, vw: [(Usize1, usize); q], }; #[derive(Clone, Copy, Debug)] enum Query { Road { a: usize, b: usize, y: usize }, Citizen { j: usize, v: usize, w: usize }, } use Query::*; let mut queries = vec![]; for (a, b, y) in aby { queries.push(Road { a, b, y }); } for (j, (v, w)) in vw.iter().copied().enumerate() { queries.push(Citizen { j, v, w }); } queries.sort_by_key(|q| match q { Road { y, .. } => *y, Citizen { w, .. } => *w, }); let mut ans = vec![0; q]; let mut dsu = Dsu::new(n); for q in queries.iter().copied().rev() { match q { Road { a, b, .. } => { dsu.merge(a, b); } Citizen { j, v, .. } => { ans[j] = dsu.size(v); } } } for a in ans { println!("{}", a); } } // dsu
今日のコミット。