码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • P1352 没有上司的舞会


    没有上司的舞会

     

    Description

    某大学有 nn 个职员,编号为 1\ldots n1…n。

    他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。

    现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数 r_iri​,但是呢,如果某个职员的直接上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。

    所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数。

    Input

    输入的第一行是一个整数 nn。

    第 22 到第 (n + 1)(n+1) 行,每行一个整数,第 (i+1)(i+1) 行的整数表示 ii 号职员的快乐指数 r_iri​。

    第 (n + 2)(n+2) 到第 2n2n 行,每行输入一对整数 l, kl,k,代表 kk 是 ll 的直接上司。

    Output

    输出一行一个整数代表最大的快乐指数。

    Sample 1

    InputcopyOutputcopy
    7
    1
    1
    1
    1
    1
    1
    1
    1 3
    2 3
    6 4
    7 4
    4 5
    3 5
    
    5
    

    Hint

    数据规模与约定

    对于 100\%100% 的数据,保证 1\leq n \leq 6 \times 10^31≤n≤6×103,-128 \leq r_i\leq 127−128≤ri​≤127,1 \leq l, k \leq n1≤l,k≤n,且给出的关系一定是一棵树。

    题解:

    设

    f[x][0]表示以x为根的子树,且x不参加舞会的最大快乐值

    f[x][1]表示以x为根的子树,且x参加了舞会的最大快乐值

    则f[x][0]=sigma{max(f[y][0],f[y][1])} (y是x的儿子)

    f[x][1]=sigma{f[y][0]}+h[x] (y是x的儿子)

    先找到唯一的树根root

    则ans=max(f[root][0],f[root][1])

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. using namespace std;
    11. const int maxn = 6010;
    12. vector<int> g[maxn];
    13. int n,h[maxn],f[maxn][2],p[maxn],rt;
    14. void dfs(int u){
    15. int sz = g[u].size();
    16. f[u][1] = h[u];
    17. for(int i = 0; i < sz; i++){
    18. //遍历u的每一个子节点
    19. int v = g[u][i];
    20. dfs(v);
    21. f[u][1] += f[v][0];
    22. f[u][0] += max(f[v][0], f[v][1]);
    23. }
    24. }
    25. int main(){
    26. scanf("%d",&n);
    27. for(int i = 1; i <= n; i++)
    28. scanf("%d",&h[i]);
    29. for(int i = 1; i < n; i++){
    30. int a,b;
    31. scanf("%d%d",&a,&b);
    32. p[a] = b;//a的父节点是b
    33. g[b].push_back(a);//b的子节点
    34. }
    35. for(int i = 1; i <= n; i++){
    36. if(!p[i]){
    37. rt = i;//找到根节点
    38. break;
    39. }
    40. }
    41. dfs(rt);
    42. printf("%d\n", max(f[rt][0], f[rt][1]));
    43. return 0;
    44. }

  • 相关阅读:
    每日一练--IT冷知识&C/C++--第八天
    从硬件缓存入门到并发编程三要素详解 Java中 volatile 、final 等关键字解析、单例模式案例
    尚硅谷-设计模式篇
    【ARM 裸机】C 语言 led 驱动
    [JAVA毕业设计源代码]精品微信小程序英语四六级小助手小程序系统|前后分离VUE[包运行成功]
    屎山代码踩坑记录:不要将一个类写的臃肿
    七大基于比较的排序算法基本原理及实现(Java版)
    面试中的情商考察:如何展示你的人际理解能力
    支持亿级标签接入,ClickHouse在广域物联网云平台架构的探索与实践
    Dynamics 365 Environment Variables(环境变量)的应用
  • 原文地址:https://blog.csdn.net/weixin_62599885/article/details/126133121
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号