1
use std::collections::*;3
const MOD: usize = 1_000_000_007;4
const INF: usize = 1_000_000_000_000_000;5
fn dfs(memo: &Vec<(usize, HashSet<usize>)>, dp: &mut Vec<usize>, i: usize) -> usize {9
temp += dfs(memo, dp, j);19
pub fn count_paths(n: i32, roads: Vec<Vec<i32>>) -> i32 {21
let mut g = vec![vec![]; n];23
let a = arr[0] as usize;24
let b = arr[1] as usize;25
let c = arr[2] as usize;30
let mut memo = vec![(INF, HashSet::new()); n];32
let mut stack = vec![(0, 0)];33
while !stack.is_empty() {34
let mut new_stack = vec![];35
while let Some((ci, cv)) = stack.pop() {36
for &(ni, v) in &g[ci] {39
memo[ni].1 = HashSet::new();40
memo[ni].1.insert(ci);42
new_stack.push((ni, nv));43
} else if nv == memo[ni].0 {44
memo[ni].1.insert(ci);51
let mut result = vec![INF; n];54
dfs(&memo, &mut result, n - 1) as i32