private static int dp[][] = new int[10002][2];
private static int tree[][] = new int[10002][300];
//构建树
public static void createTree(int parent,int child){
int i = 0;
while (tree[parent][i]!=0) {
i++;
}
tree[parent][i] = child;
}
//遍历
public static void dfs(int child, int parent){
int child_1 = tree[child][0];
for(int i = 0;child_1!=0;i++){
child_1 = tree[child][i];
dfs(child_1,child);
System.out.println(child);
dp[child][1] += dp[child_1][0];
dp[child][0] += dp[child_1][1]>dp[child_1][0]?dp[child_1][1]:dp[child_1][0];
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int root = 0;
for(int i = 0;i<n;i++){
int x = scanner.nextInt();
if(i==0){
root = x;
}
dp[x][1] = x;
}
for(int i = 0;i<n-1;i++){
int parent = scanner.nextInt();
int child = scanner.nextInt();
createTree(parent,child);
}
dfs(root,0);
int max = dp[root][1]>dp[root][0]?dp[root][1]:dp[root][0];
System.out.println(max);
}
蓝桥杯:JAVA结点选择(树形动态规划)
猜你喜欢
转载自blog.csdn.net/qq_37740841/article/details/85225144
今日推荐
周排行