Submission #43068875


Source Code Expand

use proconio::{input, marker::Usize1};

fn adjacency_list(n: usize, uv: &[(usize, usize)]) -> Vec<Vec<usize>> {
    let mut edges = vec![vec![]; n];
    for (u, v) in uv.iter().copied() {
        edges[u].push(v);
        edges[v].push(u);
    }
    edges
}

fn dfs(
    dp_w: &mut Vec<usize>,
    dp_b: &mut Vec<usize>,
    edges: &[Vec<usize>],
    modp: usize,
    u: usize,
    p: usize,
) {
    for v in edges[u].iter().copied() {
        if v == p {
            continue;
        }
        dfs(dp_w, dp_b, edges, modp, v, u);

        dp_w[u] *= dp_w[v] + dp_b[v];
        dp_w[u] %= modp;
        dp_b[u] *= dp_w[v];
        dp_b[u] %= modp;
    }
}

fn main() {
    input! {
        n: usize,
        ab: [(Usize1, Usize1); n - 1],
    }

    let modp = 1_000_000_007_usize;
    let mut dp_w = vec![1_usize; n];
    let mut dp_b = vec![1_usize; n];
    let edges = adjacency_list(n, &ab);
    dfs(&mut dp_w, &mut dp_b, &edges, modp, 0, 0);
    let ans = (dp_w[0] + dp_b[0]) % modp;
    println!("{}", ans);
}

Submission Info

Submission Time
Task P - Independent Set
User bouzuya
Language Rust (1.42.0)
Score 100
Code Size 1017 Byte
Status AC
Exec Time 50 ms
Memory 19760 KiB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 20
Set Name Test Cases
All 0_00, 0_01, 0_02, 0_03, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15
Case Name Status Exec Time Memory
0_00 AC 6 ms 2128 KiB
0_01 AC 2 ms 2020 KiB
0_02 AC 2 ms 1964 KiB
0_03 AC 3 ms 1992 KiB
1_00 AC 2 ms 2044 KiB
1_01 AC 50 ms 19760 KiB
1_02 AC 35 ms 12580 KiB
1_03 AC 33 ms 12568 KiB
1_04 AC 36 ms 12592 KiB
1_05 AC 36 ms 12764 KiB
1_06 AC 35 ms 12724 KiB
1_07 AC 42 ms 12536 KiB
1_08 AC 41 ms 12200 KiB
1_09 AC 43 ms 12144 KiB
1_10 AC 43 ms 11960 KiB
1_11 AC 40 ms 12020 KiB
1_12 AC 44 ms 11980 KiB
1_13 AC 47 ms 12472 KiB
1_14 AC 42 ms 14328 KiB
1_15 AC 48 ms 16716 KiB