結果

問題 No.763 Noelちゃんと木遊び
ユーザー ngtkanangtkana
提出日時 2024-05-24 04:24:42
言語 Rust
(1.77.0 + proconio)
結果
AC  
実行時間 44 ms / 2,000 ms
コード長 3,324 bytes
コンパイル時間 13,762 ms
コンパイル使用メモリ 383,528 KB
実行使用メモリ 11,392 KB
最終ジャッジ日時 2024-12-20 19:13:08
合計ジャッジ時間 15,590 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 28 ms
11,392 KB
testcase_01 AC 14 ms
6,816 KB
testcase_02 AC 35 ms
9,472 KB
testcase_03 AC 22 ms
7,040 KB
testcase_04 AC 15 ms
6,816 KB
testcase_05 AC 21 ms
6,912 KB
testcase_06 AC 44 ms
11,008 KB
testcase_07 AC 39 ms
10,752 KB
testcase_08 AC 23 ms
7,296 KB
testcase_09 AC 15 ms
6,816 KB
testcase_10 AC 7 ms
6,816 KB
testcase_11 AC 41 ms
11,264 KB
testcase_12 AC 36 ms
9,984 KB
testcase_13 AC 36 ms
9,984 KB
testcase_14 AC 31 ms
9,216 KB
testcase_15 AC 22 ms
6,912 KB
testcase_16 AC 4 ms
6,816 KB
testcase_17 AC 22 ms
7,040 KB
testcase_18 AC 41 ms
11,004 KB
testcase_19 AC 36 ms
10,112 KB
testcase_20 AC 37 ms
10,112 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

fn main() {
    let n: usize = io::input();
    let mut g = vec![vec![]; n];
    for _ in 0..n - 1 {
        let (u, v): (usize, usize) = io::input();
        let (u, v) = (u - 1, v - 1);
        g[u].push(v);
        g[v].push(u);
    }
    let mut stack = vec![0];
    let mut ord = Vec::new();
    let mut parent = vec![usize::MAX; n];
    while let Some(x) = stack.pop() {
        ord.push(x);
        for &y in &g[x] {
            if y == parent[x] {
                continue;
            }
            parent[y] = x;
            stack.push(y);
        }
    }
    let mut dp = vec![(0, 0); n];
    for &x in ord.iter().rev() {
        for &y in &g[x] {
            if y == parent[x] {
                continue;
            }
            dp[x].0 += dp[y].1;
            dp[x].1 += dp[y].0.max(dp[y].1);
        }
        dp[x].0 += 1;
    }
    let ans = dp[0].0.max(dp[0].1);
    println!("{}", ans);
}
// io {{{
// https://ngtkana.github.io/ac-adapter-rs/io/index.html

#[allow(dead_code)]
mod io {
    use std::cell::Cell;
    use std::io::stdin;
    use std::io::BufRead;
    use std::io::BufReader;
    use std::io::Lines;
    use std::io::Stdin;
    use std::sync::Mutex;
    use std::sync::Once;
    pub fn input<T: ParseLine>() -> T {
        ParseLine::parse_line(&line())
    }
    pub trait ParseLine {
        fn parse_line(s: &str) -> Self;
    }
    macro_rules! impl_parse_line {
        ($($t:ty),*) => {
            $(impl ParseLine for $t {
                fn parse_line(s: &str) -> Self {
                    s.parse().unwrap()
                }
            })*
        };
    }
    impl_parse_line!(u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize, String, char);
    macro_rules! impl_parse_line_tuple {
        ($($t:ident),*) => {
            impl<$($t: ParseLine),*> ParseLine for ($($t,)*) {
                fn parse_line(s: &str) -> Self {
                    let mut s = s.split_whitespace();
                    ($($t::parse_line(s.next().unwrap()),)*)
                }
            }
        };
    }
    impl_parse_line_tuple!(T0, T1);
    impl_parse_line_tuple!(T0, T1, T2);
    impl_parse_line_tuple!(T0, T1, T2, T3);
    impl_parse_line_tuple!(T0, T1, T2, T3, T4);
    impl_parse_line_tuple!(T0, T1, T2, T3, T4, T5);
    impl_parse_line_tuple!(T0, T1, T2, T3, T4, T5, T6);
    impl_parse_line_tuple!(T0, T1, T2, T3, T4, T5, T6, T7);
    impl_parse_line_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8);
    impl_parse_line_tuple!(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9);
    impl<T: ParseLine> ParseLine for Vec<T> {
        fn parse_line(s: &str) -> Self {
            s.split_whitespace().map(T::parse_line).collect()
        }
    }
    static ONCE: Once = Once::new();
    type Server = Mutex<Lines<BufReader<Stdin>>>;
    struct Lazy(Cell<Option<Server>>);
    unsafe impl Sync for Lazy {}
    fn line() -> String {
        static SYNCER: Lazy = Lazy(Cell::new(None));
        ONCE.call_once(|| {
            SYNCER
                .0
                .set(Some(Mutex::new(BufReader::new(stdin()).lines())));
        });
        unsafe {
            (*SYNCER.0.as_ptr())
                .as_ref()
                .unwrap()
                .lock()
                .unwrap()
                .next()
                .unwrap()
                .unwrap()
        }
    }
}
// }}}
0