use proconio::{input, marker::Usize1}; fn main() { input! { t: usize, } let output = (0..t) .map(|_| if solve() { "Yes" } else { "No" }) .collect::>() .join("\n"); println!("{output}"); } fn solve() -> bool { input! { (n, m, k): (usize, usize, u32), uv: [(Usize1, Usize1); m], bb: [u32; n], } let mut graph = vec![vec![]; n]; for &(u, v) in &uv { graph[u].push(v); graph[v].push(u); } recursion(&graph, None, 0, k, &bb) == 0 } fn recursion( graph: &[Vec], parent: Option, current: usize, k: u32, bb: &[u32], ) -> u32 { let sum = graph[current] .iter() .filter(|&&adjacent| Some(adjacent) != parent) .map(|&adjacent| recursion(graph, Some(current), adjacent, k, bb)) .fold(0_u32, |acc, x| (acc + x) % k); (bb[current] + k - sum) % k }