招商银行信用卡中心第二题
第二题没有写完,自测没问题,从每个孩子节点自底向上遍历到根节点为止,一路权值累加,若权值比当前节点的结果大就更新结果。感觉不需要递归和dp,不知道这样思路是不是对的,可以和大家探讨一下:
import java.util.Scanner; public class Main { public static class TNode{ int parent; int weight; int res; public TNode(int parent, int weight) { this.parent = parent; this.weight = weight; this.res = 0; } } public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { int n = in.nextInt(); TNode[] tree = new TNode[n+1]; for (int i=1; i<n; i++){ int parent = in.nextInt(); int son = in.nextInt(); int weight = in.nextInt(); tree[son] = new TNode(parent, weight); } tree[1] = new TNode(-1, 0); for (int i=tree.length-1; i>=1; i--){ int value = 0; int j = i; while (j != -1){ tree[j].res = Math.max(value,tree[j].res); value += tree[j].weight; j = tree[j].parent; } } for (int i=1; i<tree.length; i++){ if (i != 1){ System.out.printf(" "); } System.out.printf(String.valueOf(tree[i].res)); } System.out.printf("\n"); } } }