結果

問題 No.1614 Majority Painting on Tree
ユーザー ngtkana
提出日時 2021-07-01 18:17:28
言語 Rust
(1.83.0 + proconio)
結果
RE  
実行時間 -
コード長 1,224 bytes
コンパイル時間 13,629 ms
コンパイル使用メモリ 402,376 KB
実行使用メモリ 11,136 KB
最終ジャッジ日時 2024-07-17 15:43:09
合計ジャッジ時間 17,152 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample WA * 1 RE * 3
other WA * 2 RE * 43
権限があれば一括ダウンロードができます

ソースコード

diff #

use std::{
    io::{stdin, Read},
    mem::replace,
    str::Split,
};

fn main() {
    let mut buf = String::new();
    stdin().read_to_string(&mut buf).unwrap();
    let mut buf = buf.split("\n");
    let [n, c] = two_usize(&mut buf);
    assert!((2..=100_000).contains(&n));
    assert!((1..=256).contains(&c));
    let mut g = vec![Vec::new(); n];
    for _ in 0..n - 1 {
        let [a, b] = two_usize(&mut buf);
        assert!((1..=n).contains(&a));
        assert!((1..=n).contains(&b));
        let a = a - 1;
        let b = b - 1;
        g[a].push(b);
        g[b].push(a);
    }
    let mut used = vec![false; n];
    let mut stack = vec![0];
    used[0] = true;
    while let Some(x) = stack.pop() {
        for &y in &g[x] {
            if replace(&mut used[y], true) {
                stack.push(y);
            }
        }
    }
    assert!(used.iter().all(|&x| x));
    end(&mut buf)
}

fn two_usize(buf: &mut Split<'_, &str>) -> [usize; 2] {
    let s = buf.next().unwrap().split(" ").collect::<Vec<_>>();
    assert_eq!(s.len(), 2);
    [s[0].parse().unwrap(), s[1].parse().unwrap()]
}

fn end(buf: &mut Split<'_, &str>) {
    assert!(buf.next().unwrap().is_empty());
    assert!(buf.next().is_none())
}
0