C++ 动态规划 树形DP 没有上司的舞会

Ural 大学有 N
名职员,编号为 1∼N

他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。

每个职员有一个快乐指数,用整数 Hi
给出,其中 1≤i≤N

现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。

在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。

输入格式
第一行一个整数 N

接下来 N
行,第 i
行表示 i
号职员的快乐指数 Hi

接下来 N−1
行,每行输入一对整数 L,K
,表示 K
是 L
的直接上司。(注意一下,后一个数是前一个数的父节点,不要搞反)。

输出格式
输出最大的快乐指数。

数据范围
1≤N≤6000
,
−128≤Hi≤127
输入样例:
7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
输出样例:
5

在这里插入图片描述

在这里插入图片描述

DFS 遍历树,求解每个节点的状态。
dfs 函数的参数 u 表示当前处理的节点。
遍历节点 u 的所有儿子节点,对每个儿子节点执行 DFS。
在递归过程中,更新状态 f[u][0] 和 f[u][1]:
如果节点 u 不参加舞会,其最大快乐值为其所有儿子节点参加舞会和不参加舞会情况下的最大值之和。
如果节点 u 参加舞会,其最大快乐值为其所有儿子节点不参加舞会情况下的最大值之和,加上节点 u 的快乐值。
递归的边界条件是叶子节点,即没有儿子节点的节点。

#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 6010;
int n;
int happy[N];
int h[N], e[N], ne[N], idx; // 邻接表来存图
int f[N][2]; // 状态
bool has_father[N]; // 标记根节点void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}void dfs(int u) // 递归求每一个状态
{f[u][1] = happy[u]; // f[u][1] 表示选择u这个点,就先把它加上for(int i = h[u]; i != -1; i = ne[i]) // 枚举u的所有儿子{int j = e[i]; // j表示u的每个儿子dfs(j); // 递归的算一下f[u][0] += max(f[j][0], f[j][1]); // 状态计算f[u][1] += f[j][0];}
}int main ()
{scanf("%d", &n);for(int i = 1; i <= n; i ++ ) scanf("%d", &happy[i]);memset(h, -1, sizeof h);for(int i = 0; i < n - 1; i ++ )  // 读入每一条边{int a, b;scanf("%d%d", &a, &b);has_father[a] = true;add(b, a);}int root = 1;   // 枚举寻找根节点while(has_father[root]) root ++ ;dfs(root);cout << max(f[root][0], f[root][1]) << endl; // 只有两种情况,取根节点和不取,去一个max就是最终的答案return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676244.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

口袋工具箱微信小程序源码

这是一款云开发口袋工具箱微信小程序源码&#xff0c;只有纯前端版本&#xff0c;该版本的口袋工具箱涵盖了13个功能&#xff0c;分别为圣诞帽头像生成、二维码生成、日语50音图、汉字拼音查询、计算器、程序员黄历、娱乐摇骰子、身材计算、所在地天气查询、IP地址查询、手机归…

自制微信红包封面

一.前言 这不是过年了吗&#xff0c;各大平台都发放了免费的微信红包封面&#xff0c;但我老是抢不到QAQ。于是乎&#xff0c;我便想“授人以鱼不如授人以渔”&#xff0c;不如自己造个封面。 二.主要步骤 1.条件 1>创建视频号 2>过去一年发表过视频号 3>过去一…

【JavaScript 漫游】【012】ES5 规范中 String 对象方法汇总

文章简介 本文为【JavaScript 漫游】专栏的第 012 篇文章&#xff0c;记录的内容包含了 ES5 规范中String 对象的所有方法。 笔者认为要掌握的方法包括&#xff1a; String.prototype.concat()String.prototype.slice()String.prototype.substring()String.prototype.substr…

【力扣】罗马数字转整数,哈希集合 + 模拟

罗马数字转整数原题地址 方法一&#xff1a;模拟 罗马数字是字符串&#xff0c;其中每个字符都对应一个整数值&#xff0c;为了方便查找&#xff0c;可以预先把这种对应关系存储到 key-value 模型的哈希表中。 遍历字符串&#xff0c;对于每个字符&#xff0c; 如果该字符不…

MacOS上怎么把格式化成APFS的U盘或者硬盘格式化回ExFAT?

一、问题 MacOS在更新MacOS Monterey后或者更高系统后发现&#xff0c;格式U盘或者硬盘只有4个APFS选项&#xff0c;那么我们该如何将APFS格式成ExFAT&#xff1f; 二、解答 将APFS的U盘或者硬盘拓展成MacOS的拓展格式即可&#xff0c;操作步骤如下 1、电脑接入U盘或者硬盘 2…

vue3 之 商城项目—二级分类

二级分类功能描述 配置二级路由 准备组件模版 <script setup></script><template><div class"container "><!-- 面包屑 --><div class"bread-container"><el-breadcrumb separator">"><el-bre…

蓝桥杯刷题--python-3

0顺子日期 - 蓝桥云课 (lanqiao.cn) import os import sys # 请在此输入您的代 import datetime startdatetime.date(2022,1,1) stopdatetime.date(2023,1,1) res0 while not start>stop: start_ str(start).replace(-, ) if 123 in start_ or 012 in start_ : res1 star…

GPT如何在一分钟内完成论文数据分析?

数据上传 PPMAN-AI 01 由于技术限制&#xff0c;目前InfinitePaper AI仅支持上传1份文件&#xff0c;且大小不超过10M。但是&#xff0c;在强大的代码解释器面前&#xff0c;这都是小问题。我们只需要将可能用到的文件打包成压缩文件上传即可&#xff0c;之后要求GPT直接解压…

MongoDB聚合:$listSampledQueries

使用$listSampledQueries可以返回指定集合或所有集合的采样查询。analyzeShardKey命令使用采样查询来计算分片密钥的读写分布指标。 语法 {$listSampledQueries: { namespace: <namespace> } }使用 如果namespace参数为某个集合&#xff0c;则列出该集合的采样查询&am…

华为OD机试真题-特殊的加密算法-2024年OD统一考试(C卷)

题目描述: 有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下 1.明文为一段数字串由0-9组成 2.密码本为数字0-9组成的二维数组 3.需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,…

数据结构之基数排序

基数排序的思想是按组成关键字的各个数位的值进行排序&#xff0c;它是分配排序的一种。在该排序方法中把一个关键字 Ki看成一个 d 元组&#xff0c;即       K1i,K2i,,Kdi 其中&#xff0c;0≤ Kji<r&#xff0c;i1~ n&#xff0c;j1~d。这里的r 称为基数。若关键字是…

Spring基础 - Spring核心之控制反转(IOC)

Spring基础 - Spring核心之控制反转(IOC) 引入 Spring框架管理这些Bean的创建工作&#xff0c;用户管理Bean转变为框架管理Bean&#xff0c;这个称之为控制翻转Spring框架托管创建的Bean放在IOC容器中Spring框架为了更好让用户配置Bean&#xff0c;必然会引入不同方式来配置B…

网络协议、网络传输认识

目录 网络协议概念 网络协议具象化理解 协议分层 TCP/IP模型 网络传输基本流程 网络协议概念 网络协议是计算机网络中用于在通信设备之间传输数据的规则集合。这些规则定义了数据的格式、传输方式、错误检测和纠正方法等&#xff0c;以确保不同设备之间的通信能够正确进行…

张楠辞任抖音集团CEO;东方甄选将开服饰号;小红书新增“附近”一级入口;华为分红770亿元

今日精选 • 张楠辞任抖音集团CEO&#xff0c;未来将聚焦剪映发展• 东方甄选将开服饰号 主打自营服饰• 小红书新增“附近”一级入口• 华为分红770亿元 大厂人事变动 • 上村健一出任中国U-16国家男子足球队主教练 投融资与企业动态 • 阿里大模型「通义千问」推出春节新…

Amazon Dynamo学习总结

目录 一、Amazon Dynamo的问世 二、Amazon Dynamo主要技术概要 三、数据划分算法 四、数据复制 五、版本控制 六、故障处理 七、成员和故障检测 一、Amazon Dynamo的问世 Amazon Dynamo是由亚马逊在2007年开发的一种高度可扩展和分布式的键值存储系统&#xff0c;旨在解…

十大排序算法之线性时间非比较类排序

线性时间非比较类排序 线性时间的算法执行效率也较高&#xff0c;从时间占用上看&#xff0c;线性时间非比较类排序要优于非线性时间排序&#xff0c;但其空间复杂度较非线性时间排序要大一些。因为线性时间非比较类排序算法会额外申请一定的空间进行分配排序&#xff0c;这也…

百度Apollo荣获量子位-智能车参考“2023智能车年度评选”两大奖项

2023&#xff0c;是谁在引领智能车浪潮&#xff1f; 量子位-智能车参考发布“2023智能车年度评选”结果。经过业内专业评审和垂直社群万人票选后&#xff0c;百度Apollo荣获「年度十大智能车技术产品/方案」「年度十大智能车领军人物」两项大奖。 年度十大智能车技术产品\方…

jvm问题自查思路

本文聊一下最近处理了一些jvm的问题上&#xff0c;将这个排查和学习过程分享一下&#xff0c;看了很多资料&#xff0c;最终都会落地到几个工具的使用&#xff0c;本文主要是从文档学习、工具学习和第三方技术验证来打开认知和实践&#xff0c;希望有用。 一、文档 不仅知道了…

springboot+vue居民小区设备报修系统

小区报修系统可以提高设施维护的效率&#xff0c;减少机构的人力物力成本&#xff0c;并使得维修人员可以更好地了解维护设备的情况&#xff0c;及时解决问题。 对于用户来说&#xff0c;报修系统也方便用户的维修请求和沟通&#xff0c;提高了用户的满意度和信任。其次小区报修…

imazing是啥?imazing有什么用

iMazing 是一款用于管理 iOS 设备的第三方软件。它支持在 Windows 或 Mac 电脑上对连接的 iPhone、iPad 或 iPod 进行数据传输、备份和管理工作。用户可以通过 iMazing 传输和备份包括照片、音乐、铃声、视频、电子书和通讯录等在内的多种信息。iMazing 的功能与苹果官方的 iTu…