zoukankan      html  css  js  c++  java
  • 洛谷1352 没有上司的舞会

    洛谷1352 没有上司的舞会

    本题地址: http://www.luogu.org/problem/show?pid=1352

    题目描述

    某大学有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。

       设d[i][j]表示以i为根的子树状态为s时的最大快乐值,s==0表示不存在s==1表示存在。则有转移方程:

       D[i][1]=sum{ d[chi][0] }

       D[i][0]=sum{max{d[chi][0],d[chi][1]}}

      需要注意的是当s==0时子树状态不是一定为1

    【代码】

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<vector>
     5 using namespace std;
     6 
     7 const int maxn = 6000+10;
     8 int R[maxn],d[maxn][2],cnt[maxn];
     9 vector<int> G[maxn];
    10 int n;
    11 
    12 void dp(int u) {
    13     if(d[u][0]) return ;
    14     
    15     for(int i=0;i<G[u].size();i++) {
    16         int v=G[u][i];
    17         dp(v);
    18         d[u][1] += d[v][0];
    19         d[u][0] += max(d[v][0],d[v][1]);  //max
    20     }
    21     d[u][1] += R[u];
    22 }
    23 
    24 int main() {
    25     scanf("%d",&n);
    26     for(int i=1;i<=n;i++) scanf("%d",&R[i]);
    27     int u,v;
    28     while(scanf("%d%d",&u,&v) && u && v)
    29         G[v].push_back(u) , cnt[u]++;
    30     int root;
    31     for(int i=1;i<=n;i++) if(!cnt[i]) {
    32         root=i; break;
    33     }
    34     dp(root);
    35     printf("%d",max(d[root][1],d[root][0]));
    36     return 0;
    37 }
  • 相关阅读:
    ffmpeg rtmp推流 视频转码
    java日志发展史 log4j slf4j log4j2 jul jcl 日志和各种桥接包的关系
    nginx stream 流转发,可以转发rtmp、mysql访问流,转发rtmp、jdbc请求
    java web http 转https 通过nginx代理访问
    linux 服务器磁盘挂载
    novnc 通过websockify代理 配置多点访问
    linux 文件服务 minio 安装部署配置
    AOP实现原理,手写aop
    java 泛型
    JAVA反射getGenericSuperclass()用法
  • 原文地址:https://www.cnblogs.com/lidaxin/p/4889933.html
Copyright © 2011-2022 走看看