• 没有上司的舞会


    题目描述

    某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。

    输入输出格式

    输入格式:

    第一行一个整数N。(1<=N<=6000)

    接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)

    接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。

    最后一行输入0 0

    输出格式:

    输出最大的快乐指数。

    输入输出样例

    输入样例#1: 
    7
    1
    1
    1
    1
    1
    1
    1
    1 3
    2 3
    6 4
    7 4
    4 5
    3 5
    0 0
    
    输出样例#1: 
    5

    分析:
    突然发现居然没写树形DP???这道题就是树形DP的模板题,所谓树形DP按我的理解就是DFS加上DP。

    CODE:
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <iostream>
     5 #include <algorithm>
     6 using namespace std;
     7 const int M=1000005;
     8 int n,nxt[M],head[M],to[M],R[M],f[M][2],tot,root;
     9 bool flag[M];
    10 inline int read(){
    11     char c=getchar();int ans=0,f=1;
    12     while (c<'0'||c>'9'){if (c=='-') f=0;c=getchar();}
    13     while (c>='0'&&c<='9') ans=(ans<<1)+(ans<<3)+(c^48),c=getchar();
    14     if (f) return ans;return ~ans+1;
    15 }
    16 int max(int u,int v){return u>v?u:v;}
    17 void add(int x,int y){
    18     nxt[++tot]=head[x];head[x]=tot;
    19     to[tot]=y;return;
    20 }
    21 void dfs(int x){
    22     f[x][0]=0;f[x][1]=R[x];
    23     for (int i=head[x];i;i=nxt[i]){
    24         dfs(to[i]);
    25         f[x][0]+=max(f[to[i]][1],f[to[i]][0]);
    26         f[x][1]+=f[to[i]][0];
    27     }
    28     return;
    29 }
    30 int main(){
    31     n=read();
    32     for (int i=1;i<=n;i++) R[i]=read();
    33     for (int i=1,x,y;i<=n;i++){
    34         x=read(),y=read();
    35         if (i!=n) add(y,x);
    36         flag[x]=1;
    37     }
    38     for (int i=1;i<=n;i++)
    39         if (!flag[i]) root=i;
    40     dfs(root);
    41     printf("%d",max(f[root][0],f[root][1]));
    42     return 0;
    43 }
    
    
    
     
  • 相关阅读:
    Linux C语言编程基础
    《信息安全系统设计与实现》学习笔记二
    《信息安全系统设计与实现》选做一
    《信息安全系统设计与实现》学习笔记一
    商用密码调研
    20191212斯廷响 2020-2021-2 《Python程序设计》实验四报告
    20191212 2020-2021-2 《Python程序设计》实验三报告
    20191212 2020-2021-2 《Python程序设计》实验二报告
    20191212 2020-2021-2 《Python程序设计》实验一报告
    学习笔记2
  • 原文地址:https://www.cnblogs.com/kanchuang/p/11185735.html
Copyright © 2020-2023  润新知