zoukankan      html  css  js  c++  java
  • 洛谷 P1352 没有上司的舞会 树形DP板子

    luogu传送门

    题目描述:

    某大学有n个职员,编号为1~n。

    他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。

    现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数 ri,但是呢,如果某个职员的直接上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。

    所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。

     

    一道树形DP的板子题。

    状态转移方程看代码。

    #include <bits/stdc++.h>
    using namespace std;
    #define N 100100
    #define isdigit(c) ((c)>='0'&&(c)<='9')
    
    inline int read(){
        int x = 0, s = 1;
        char c = getchar();
        while(!isdigit(c)){
            if(c == '-')s = -1;
            c = getchar();
        }
        while(isdigit(c)){
            x = (x << 1) + (x << 3) + (c ^ '0');
            c = getchar();
        }
        return x * s;
    }
    
    struct node{
        int v;
        int next;
    } t[N];
    int f[N];
    int happy[N];
    bool vis[N];
    int root = 0;
    
    int bian = 0;
    inline void add(int u, int v){
        t[++bian] = (node){v, f[u]};
        f[u] = bian;
        return ;
    }
    
    int dp[N][2];
    
    void dfs(int now){
        dp[now][0] = 0;
        dp[now][1] = happy[now];
        for(int i = f[now]; i; i = t[i].next){
            int v = t[i].v;
            dfs(v);
            dp[now][0] += max(dp[v][0], dp[v][1]);
            dp[now][1] += dp[v][0];
        }
    }
    
    int main(){
        int n = read();
        for(int i = 1;i <= n; i++) happy[i] = read();
        for(int i = 1;i < n; i++){
            int x = read(), y = read();
            add(y, x);
            vis[x] = 1;
        }
        for(int i = 1;i <= n; i++)
            if(!vis[i]){
                root = i;
                break;
            }
        dfs(root);
        printf("%d
    ", max(dp[root][1], dp[root][0]));
    } 
  • 相关阅读:
    【转载】这才是真正的表扩展方案
    【转载】啥,又要为表增加一列属性?
    【转载】这才是真正的分布式锁
    mysql备份表sql
    selenium定位当前处于那个iframe(frame)中
    MQ手动推送消息
    报表导出时间格式数据多‘0‘
    python里的原始字符串
    qq邮箱设置授权码方法(jenkins)
    Apache与Tomcat有什么关系和区别(转)
  • 原文地址:https://www.cnblogs.com/wondering-world/p/12939646.html
Copyright © 2011-2022 走看看