From 08f6ce45811605b44fe468ee39f162aa1234977a Mon Sep 17 00:00:00 2001 From: li-chx Date: Fri, 28 Nov 2025 08:59:57 +0800 Subject: [PATCH] =?UTF-8?q?2872.=20=E5=8F=AF=E4=BB=A5=E8=A2=AB=20K=20?= =?UTF-8?q?=E6=95=B4=E9=99=A4=E8=BF=9E=E9=80=9A=E5=9D=97=E7=9A=84=E6=9C=80?= =?UTF-8?q?=E5=A4=A7=E6=95=B0=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.rs | 49 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/src/main.rs b/src/main.rs index 95ba5e1..ac4c7ec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,27 +1,44 @@ -use std::cmp::max; +use crate::arr::make_matrix; +use std::collections::HashSet; struct Solution; mod arr; impl Solution { - pub fn max_subarray_sum(nums: Vec, k: i32) -> i64 { - let mut temp = 0_i64; - let k = k as usize; - let mut dp = vec![0_i64; nums.len()]; - let mut ans = 0_i64; - for i in 0..k { - temp += nums[i] as i64; - } - dp[k - 1] = temp; - ans = temp; - for i in k..nums.len() { - temp = temp + (nums[i] - nums[i - k]) as i64; - dp[i] = temp + if dp[i-k] > 0 { dp[i-k] } else { 0 }; - ans = max(ans,dp[i]); + pub fn max_k_divisible_components( + n: i32, + edges: Vec>, + values: Vec, + k: i32, + ) -> i32 { + let mut edge = vec![HashSet::new(); n as usize]; + edges.iter().for_each(|x| { + edge[x[0] as usize].insert(x[1] as usize); + edge[x[1] as usize].insert(x[0] as usize); + }); + fn dfs(total_ans:&mut i32, k:i32, root: usize, last: usize, edge: &Vec>,values: &Vec) -> i64{ + let mut ans = values[root] as i64; + for &t in edge[root].iter() { + if t == last { continue; } + ans += dfs(total_ans,k,t, root, edge,values); + } + if ans % k as i64 == 0 { + *total_ans += 1; + 0 + }else { + ans + } } + let mut ans = 0; + dfs(&mut ans,k,0, usize::MAX, &edge,&values); ans } } fn main() { - let result = Solution::max_subarray_sum(vec![-5,1,2,-3,4],2); + let result = Solution::max_k_divisible_components( + 7, + make_matrix("[[0,1],[0,2],[1,3],[1,4],[2,5],[2,6]]"), + vec![3, 0, 6, 1, 5, 2, 1], + 3, + ); println!("{:?}", result); }