zoukankan      html  css  js  c++  java
  • 洛谷 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 }
  • 相关阅读:
    软件质量见解
    Vim 简明教程【转载】
    Actor Mailbox
    Unity对齐工具
    静态AOP Fody PropertyChanged
    棋牌分布式架构
    死锁
    curl 获取自定义数据
    WPF RichTextBox添加一条有颜色的记录
    arp -s 添加失败:拒绝访问
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/12207465.html
Copyright © 2011-2022 走看看