码迷,mamicode.com
首页 > 其他好文 > 详细

树形dp

时间:2019-03-19 01:10:33      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:break   杭电   util   ++   cto   pre   表示   code   nbsp   

入门:

题意:杭电1520

先输入n个人,接下来n行输入他们的快乐值,再接下来输入一些数对<a,b>,表示b是a的上司(别看反了)!

           要求直属上司和员工不能同时出席宴会,求宴会最大的快乐值。

 
 
import java.util.*;

public class Main8 {
 static Vector<int[]>v=new Vector<int[]>();
 static int par[]=new int[6001];
 static int son[]=new int[6001];
 static int dp[][]=new int[6001][2];
 static int vis[]=new int[6001];
 static int n;
         public static void dfs(int root){
             vis[root]=1;
             for(int i=1;i<=n;i++){
                 if(vis[i]==0&&par[i]==root){
                     dfs(i);
                     dp[root][1]+=dp[i][0];
                     dp[root][0]+=Math.max(dp[i][0], dp[i][1]);
                 }
             }
         }
 
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
             n = sc.nextInt();
            int a ,b;
            for(int i=1;i<=n;i++)
                dp[i][1]=sc.nextInt();
            while(true){
                 a= sc.nextInt();
                 b = sc.nextInt();
                 if(a==0&&b==0)
                     break;
                son[a]++;
                par[a]=b;
                 
            }
            for(int i=1;i<=n;i++){
                if(son[i]==0){
                    a=i;           //找到根节点
                    break;
                }
            }
            dfs(a);
            System.out.println(Math.max(dp[a][0], dp[a][1]));
        }
    }

 

树形dp

标签:break   杭电   util   ++   cto   pre   表示   code   nbsp   

原文地址:https://www.cnblogs.com/ls-pankong/p/10556069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!