【题目】一个公司的上下节关系是一棵多叉树,这个公司要举办晚会,你作为组织者已经摸清了大家的心理:一个员工的直
接上级如果到场,这个员工肯定不会来。每个员工都有一个活跃度的值,决定谁来你会给这个员工发邀请函,怎么
让舞会的气氛最活跃?返回最大的活跃值。
public class MaxHappy {
public static class Node {
public int huo;//此员工的活跃值
public List<Node> nexts;//此员工的下级员工集合
public Node(int huo, List<Node> nexts) {
this.huo = huo;
this.nexts = new ArrayList<Node>();
}
}
public static class ReturnType {
public int lai_huo;
public int bu_lai_huo;
public ReturnType(int lai_huo, int bu_lai_huo) {
this.lai_huo = lai_huo;
this.bu_lai_huo = bu_lai_huo;
}
}
public static ReturnType process(Node head) {
int lai_huo = head.huo;
int bu_lai_huo = 0;
for (int i = 0; i < head.nexts.size(); i++) {
Node next = head.nexts.get(i);
ReturnType nextData = process(next);
lai_huo += nextData.bu_lai_huo;
bu_lai_huo += Math.max(nextData.lai_huo, nextData.bu_lai_huo);
}
return new ReturnType(lai_huo, bu_lai_huo);
}
public static int getMaxHuo(Node head) {
ReturnType returnData = process(head);
return Math.max(returnData.bu_lai_huo, returnData.lai_huo);
}
}