zoukankan      html  css  js  c++  java
  • codevs1380 没有上司的舞会

    1380 没有上司的舞会

     
    题目描述 Description

          Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数最大。但是,没有职员愿和直接上司一起与会。

    输入描述 Input Description

    第一行一个整数N。(1<=N<=6000)
    接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)
    接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。
    最后一行输入0,0。

    输出描述 Output Description

    输出最大的快乐指数。

    样例输入 Sample Input

    7
    1
    1
    1
    1
    1
    1
    1
    1 3
    2 3
    6 4
    7 4
    4 5
    3 5
    0 0

    样例输出 Sample Output

    5

    数据范围及提示 Data Size & Hint

    各个测试点1s

    树形DP,顾名思义就是在树上分阶段搞状态转移。这道题就是一个既典型又很简单的例子。
    首先明确对于每个节点能够决定它对应的最优解的节点就是他的所有儿子节点。
    然后,每个节点都有选,不选两种情况,对于这两种情况,需要对它进行分类讨论。
    如果这个节点选,那么它的所有儿子节点一定都不选,dp[i][1]=Σ(dp[j][0])+r[i]
    如果这个节点不选,他的儿子节点就可选可不选,dp[i][0]=Σmax(dp[j][1],dp[j][0])+r[i]
    最终答案为max(dp[root][0],dp[root][1])

    /*Cola说必须用邻接链表*/
    #include<iostream>
    #include<cstdio>
    using namespace std; 
    int n,r[6010],dp[6010][2],head[6010],num,fa[6010];
    struct node{
        int to,pre;
    }e[6010];
    void Insert(int from,int to){
        e[++num].to=to;
        e[num].pre=head[from];
        head[from]=num;
    }
    void dfs(int k){
        for(int i=head[k];i;i=e[i].pre){
            int v=e[i].to;
            dfs(v);
            dp[k][0]+=max(dp[v][0],dp[v][1]);
            dp[k][1]+=dp[v][0];
        }
        dp[k][1]+=r[k];
    }
    int main(){
        freopen("manager.txt","r",stdin);
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&r[i]);
        int x,y;
        for(int i=1;i<n;i++){
            scanf("%d%d",&y,&x);
            Insert(x,y);fa[y]=x;
        }int root;
        for(int i=1;i<=n;i++)if(fa[i]==0){root=i;break;}
        dfs(root);
        int result=max(dp[root][0],dp[root][1]);
        printf("%d",result);
    }
  • 相关阅读:
    css中后代、元素、类、id选择器以及行间style优先级的比较
    JS小功能x系列6文字自动滚动
    JS小功能系列7自动打字
    JS小功能系列6折叠
    JS小功能系列5图片左右移动
    JS小功能系列4图片轮播综合数字轮播,顺时针逆时针,自动轮播
    JS小功能系列3时钟
    JS小功能系列2商品计算
    JS小功能系列1换一批
    JS隔行变色,鼠标悬停变色
  • 原文地址:https://www.cnblogs.com/thmyl/p/6615955.html
Copyright © 2011-2022 走看看