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 |
|
| 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 |