• 洛谷 P1352 没有上司的舞会(树形dp)


    传送门


    解题思路

    就是一道树形dp的模板。

    偷得课件QAQ:

    这个题用dp[i][0]表示i不去时以i为根的子树的最大快乐指数,

        dp[i][1]表示i去时以i为根的子树的最大快乐指数。

    然后转移方程就很容易写出来了。见代码。

    最后要注意输入的u,v是v是u的上司。

    AC代码

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int n,r[6005],cnt,dp[6005][2],p[6005],root;
     6 bool vis[6005];
     7 struct node{
     8     int v,next;
     9 }e[6005];
    10 void insert(int u,int v){
    11     cnt++;
    12     e[cnt].v=v;
    13     e[cnt].next=p[u];
    14     p[u]=cnt; 
    15 }
    16 void dfs(int u){
    17     for(int i=p[u];i!=-1;i=e[i].next){
    18         int v=e[i].v;
    19         dfs(v);
    20         dp[u][0]+=max(dp[v][0],dp[v][1]);
    21         dp[u][1]+=dp[v][0];
    22     }
    23 }
    24 int main(){
    25     memset(p,-1,sizeof(p)); 
    26     cin>>n;
    27     for(int i=1;i<=n;i++){
    28         cin>>dp[i][1];
    29     }
    30     for(int i=1;i<n;i++){
    31         int u,v;
    32         cin>>u>>v;
    33         vis[u]=1;
    34         insert(v,u);
    35     }
    36     for(int i=1;i<=n;i++){
    37         if(!vis[i]){
    38             root=i;
    39             break;
    40         }
    41     }
    42     dfs(root);
    43     cout<<max(dp[root][0],dp[root][1]);
    44     return 0;
    45 }
  • 相关阅读:
    Android状态栏白底黑字,只需两步轻松搞定
    MyBatis注解
    MyBatis延迟加载和缓存
    MyBatis关联查询
    mybatis智能标签1
    Mybatis智能标签
    增删改查
    初始MyBatis
    第7章:Servlet 基础
    第3章 JSP数据交互(二)
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/12207465.html
Copyright © 2020-2023  润新知