树
![在这里插入图片描述](https://img-blog.csdnimg.cn/8d800dfa992c4d969f931cf35c13cb07.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p2l5Zad6ZiU6JC9,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/24f5e76d5c47472abfad278dfa6289ff.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p2l5Zad6ZiU6JC9,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/574a6fa903fb4569ac7f911c8e3350ab.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5p2l5Zad6ZiU6JC9,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
import java.util.*;
public class Main{
static int a = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] exist = new int[n];
int[] combine = new int[n];
int[] nodes = new int[100];
for(int i = 0;i<n;i++){
exist[i] = sc.nextInt();
}
combine[0] = 0;
nodes[1] = 1;
for(int i = 1;i<n;i++){
combine[i] = sc.nextInt();
if(nodes[2*combine[i]]!=0){
nodes[2*combine[i]+1] = i+1;
}else{
nodes[2*combine[i]] = i + 1;
}
}
pre(nodes,1,exist,m);
System.out.println(a);
}
public static void pre(int[] nodes,int i,int[] exist,int m){
// System.out.println("m: "+ m);
if(nodes[i] == 0 || m<0){
return;
}
m = m - exist[nodes[i] - 1];
if(nodes[2*i] == 0 && nodes[2*i+1] == 0 && m >=0){
a += 1;
System.out.println("i: " + i);
System.out.println("m: " + m);
System.out.println("nodes[i]: " + nodes[i]);
System.out.println("exist[nodes[i] - 1]:" + exist[nodes[i] - 1]);
System.out.println("===============");
}
pre(nodes, 2 * i, exist, m);
pre(nodes, 2 * i + 1, exist, m);
}
}
主要想法为:dfs遍历数组树