2023-03-16 ABC120 を解いた / Corne Chocolate の 2 台目
Corne Chocolate をつくった。 2 台目で 1 台目は 2020-09-12 につくったもの。 2023-02-03 に買い 2023-03-11 で失敗し 2023-03-14 にやり直していたもの。
『プロダクトマネジメント』 https://www.oreilly.co.jp/books/9784873119250/ を読んだ。
ABC120 : AtCoder Beginner Contest 120 の A, B, C, D を解いた。
- A - Favorite Sound
https://atcoder.jp/contests/abc120/tasks/abc120_a
- 提出: https://atcoder.jp/contests/abc120/submissions/39769854
(b / a).min(c)
- B - K-th Common Divisor
https://atcoder.jp/contests/abc120/tasks/abc120_b
- 提出: https://atcoder.jp/contests/abc120/submissions/39770029
A, B <= 100
なので1..=A.max(B)
の範囲で実際に割ってみて候補を列挙した上で大きい側から K 番目を取れば良い
- C - Unification
https://atcoder.jp/contests/abc120/tasks/abc120_c
- 提出: https://atcoder.jp/contests/abc120/submissions/39770173
- 貪欲法
- スタックが空ならプッシュ、末尾と違うものならポップ、同じものならプッシュ
- ポップした回数 * 2 が答え
- D - Decayed Bridges
https://atcoder.jp/contests/abc120/tasks/abc120_d
- 提出: https://atcoder.jp/contests/abc120/submissions/39771131
- Union-Find, 逆順に考える
- 連結しているものを非連結にするのは難しいので逆順に (連結していくように) 考える
- 最初の不便でない個数は 0
- 連結していないものを連結するたびに連結前の A 側の連結成分のサイズ * B 側のサイズの、不便でない個数が増える
- 最後に求めておいた答えを順に出力すれば良い
use dsu::*;
use proconio::{input, marker::Usize1};
fn main() {
input! {
n: usize,
m: usize,
ab: [(Usize1, Usize1); m],
};
let mut ans = vec![0_usize; m + 1];
ans[m] = 0;
let mut dsu = Dsu::new(n);
for (i, (a, b)) in ab.into_iter().enumerate().rev() {
ans[i] = ans[i + 1];
if dsu.same(a, b) {
continue;
} else {
let size_a = dsu.size(a);
let size_b = dsu.size(b);
dsu.merge(a, b);
ans[i] += size_a * size_b;
}
}
let all = n * (n - 1) / 2;
for a in ans.into_iter().skip(1) {
println!("{}", all - a);
}
}
// dsu
今日のコミット。
- tsukota 1 commit
- rust-atcoder 1 commit