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;
    }
  • 相关阅读:
    后缀数组 (Suffix Array) 学习笔记
    Miller-Rabin 素性测试 与 Pollard Rho 大整数分解
    [ USACO 2013 OPEN ] Photo
    清华集训2016做题记录
    「UNR#2」黎明前的巧克力
    「UNR#1」奇怪的线段树
    Atcoder Grand Contest 018 E
    「NOI2015」小园丁与老司机
    「集训队作业2018」三角形
    Codeforces 878 E. Numbers on the blackboard
  • 原文地址:https://www.cnblogs.com/songer/p/5308045.html
Copyright © 2011-2022 走看看