zoukankan      html  css  js  c++  java
  • 树形动规--没有上司的舞会--C++

    题目来源:code[VS]

    题目描述 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

    作为一个蒟蒻,写了半天发现写错了,只好找了一个题解。。。。

    题解如下:

    #include<cstdio>
    #include<iostream>
    #include<queue>
    #include <cstring>
    #define MEM(x) memset(x,0,sizeof(x))
    using namespace std;
    const int maxn=6000+10;
    int qifen[maxn],fa[maxn],son[maxn];
    int s[maxn],gs[maxn];
    queue<int> q;
    
    int main()
    {
        MEM(qifen);
        MEM(fa);
        MEM(son);
        MEM(s);
        MEM(gs);
        int n,x,y;
        scanf("%d",&n);
        for(int i=1;i<=n;++i)
        {
            scanf("%d",&qifen[i]);
        }
        while(scanf("%d%d",&x,&y)&&x!=0&&y!=0)
        {
            fa[x]=y;
            son[y]++;
        }
        for(int i=1;i<=n;++i)
        {
            if(son[i]==0)
            q.push(i);
        }
        while(!q.empty())
        {
            int now=q.front();
            s[fa[now]]+=max(s[now],gs[now]+qifen[now]);
            gs[fa[fa[now]]]+=max(s[now],gs[now]+qifen[now]);
            if(!(--son[fa[now]]))
            q.push(fa[now]);
            q.pop();
        }
        int ans=0;
        for(int i=1;i<=n;++i)
        {
            if(fa[i]==0)
            ans+=max(s[i],gs[i]+qifen[i]);
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    C#生成唯一值的方法汇总
    Ajax && json在springmvc中的使用
    spring集成mybatis
    mybatis iBatis
    springjdbc
    拦截器
    系统分层
    Java反射(reflect)
    springmvc
    spring 之 使用注解简化配置
  • 原文地址:https://www.cnblogs.com/songer/p/5308045.html
Copyright © 2011-2022 走看看