Date:2022.02.21
题目描述
在这个问题中,给定一个值 s 和一棵树。在树的每个节点有一个权值,第 i 个点的权值为 ai,问有多少条路径的节点权值总和为 s。路径中节点的深度必须是升序的。假设节点 1 是根节点,根的深度是 0,它的儿子节点的深度为 1。路径不必一定从根节点开始。
输入格式
第一行有两个整数 n 和 s,其中 n 是树的节点数。
第二行有 n 个整数,第 i 个整数 ai 表示节点 i 的权值。
接下来的 (n−1) 行,每行有两个个整数 x 和 y,表示 y 是 x 的儿子。
输出格式
输出路径节点总和为 s 的路径数量。
输入输出样例
输入 #1复制
3 3
1 2 3
1 2
1 3
输出 #1复制
2
说明/提示
数据规模与约定
对于 100% 的数据,保证 1≤n≤105,1≤ai,s≤1031≤n≤10^5,1≤ai ,s≤10^31≤n≤105,1≤ai,s≤103。
思路①:暴力dfs,每个点dfs一次。竟然没t,震惊(数据真水!
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5+10;
LL n,m,w

该博客介绍了洛谷P3252题目,涉及一棵树上的节点权值和为s的路径数量问题。通过深度优先搜索(DFS)策略,结合树的前缀和思想,解决数据规模为n≤10^5且权值不超过10^3的路径查找。博主分享了两种解题方法,包括暴力DFS和利用前缀和的优化方法,其中优化方法利用集合(set)进行判重,或者利用前缀和的单调性进行二分查找。
最低0.47元/天 解锁文章
307

被折叠的 条评论
为什么被折叠?



