牛客–派对的最大快乐值
java总共花了24M内存用了3.5s,醉了…还是c++猛…
import java.util.*;
public class Main{
static class Node{
//Integer leader;
ArrayList<Integer> workers;
int happy;
public Node(int h){
this.happy = h;
workers = new ArrayList<Integer>();
}
}
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int num = s.nextInt();
int boss = s.nextInt();
Node[] list = new Node[num];
for(int i=0;i<num;i++){
list[i] = new Node(s.nextInt());
}
while(s.hasNext()){
int first = s.nextInt();
int second = s.nextInt();
//System.out.println(first+"---"+second);
list[first-1].workers.add(second-1);//对应索引要减一
}
int[][] dp = new int[num][2];
maxHappy(list,dp,boss-1);
System.out.println(Math.max(dp[boss-1][0],dp[boss-1][1]));
//for(int i=0;i<list.length;i++){
//System.out.println(list[i].happy);
//}
}
public static void maxHappy(Node[] list,int[][] dp,int i){
dp[i][1] = list[i].happy;
for(Integer t: list[i].workers){//注意!!这里仅仅是直接下级不能来,而不是所有下级!!!
maxHappy(list,dp,t);
dp[i][1] += dp[t][0];
dp[i][0] += Math.max(dp[t][0],dp[t][1]);
}
}
}