【题目】
员工信息的定义如下:
public static class Employee {public int happy;// 这名员工可以带来的欢乐值public List<Employee> employeeList;// 这名员工有哪些直接下级public Employee(int happy, List<Employee> employeeList) {this.happy = happy;this.employeeList = employeeList;}
}
公司的每个员工都符合Employee类的描述。整个公司人员结构可以看作是一颗标准的,没有环的多叉树。树的头节点是公司的唯一的老板,除老板外,每个员工都有唯一的直接上级。叶节点是没有任何下属的基层员工,除基层员工外,每个员工都有一个或多个直接下级
,这个公司现在要办party,你可以决定那些员工来,哪些员工不来,但是要遵循如下规则:
1、如果某个员工来了,那么这个员工的所有直接下级都不能来
2、派对的整体快乐值是所有到场员工快乐值的累加
3、你的目标是让派对的整体快乐值最大
给定一个头节点boss,请返回派对的最大快乐值
要求:如果以boss为头节点的整棵树有N个节点,请做到时间复杂度为O(N)
public static ReturnType getPartyMaxHappy(Employee employee) {if (employee == null) {return new ReturnType(0, 0);}int yesMax = employee.happy;int noMax = 0;for (Employee employee1 : employee.employeeList) {ReturnType temp = getPartyMaxHappy(employee1);yesMax += temp.noMax;noMax+= Math.max(temp.yesMax,temp.noMax);}return new ReturnType(yesMax, noMax);}public static class ReturnType {public int yesMax;public int noMax;public ReturnType(int yesMax, int noMax) {this.yesMax = yesMax;this.noMax = noMax;}}