diff --git a/cargo-atcoder-1.70.0/contests/typical90/src/bin/012.rs b/cargo-atcoder-1.70.0/contests/typical90/src/bin/012.rs index 2a9506c8..6a3817e5 100644 --- a/cargo-atcoder-1.70.0/contests/typical90/src/bin/012.rs +++ b/cargo-atcoder-1.70.0/contests/typical90/src/bin/012.rs @@ -1,10 +1,51 @@ +use ac_library::Dsu; use proconio::{input, marker::Usize1}; fn main() { input! { - n: usize, - a: [Usize1; n], + h: usize, + w: usize, + capital_q: usize, }; - let ans = n - a.len(); - println!("{}", ans); + + let mut dsu = Dsu::new(h * w); + let mut table = vec![vec![false; w]; h]; + + for _ in 0..capital_q { + input! { + t: usize, + }; + + match t { + 1 => { + input! { + r: Usize1, + c: Usize1, + } + table[r][c] = true; + let dir = vec![(-1, 0), (0, -1), (0, 1), (1, 0)]; + for (dr, dc) in dir { + let (nr, nc) = (r as i64 + dr, c as i64 + dc); + if !(0..h as i64).contains(&nr) || !(0..w as i64).contains(&nc) { + continue; + } + let (nr, nc) = (nr as usize, nc as usize); + if table[nr][nc] { + dsu.merge(r * w + c, nr * w + nc); + } + } + } + 2 => { + input! { + ra: Usize1, + ca: Usize1, + rb: Usize1, + cb: Usize1, + } + let ans = table[ra][ca] && dsu.same(ra * w + ca, rb * w + cb); + println!("{}", if ans { "Yes" } else { "No" }); + } + _ => unreachable!(), + } + } }