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…

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…

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

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

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

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

网络协议、网络传输认识

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

Amazon Dynamo学习总结

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

函数及函数的定义

前言&#xff1a; 在之前介绍指针的时候&#xff0c;小编发现有些地方需要用函数&#xff0c;所以小编决定先带领大家学习函数&#xff0c;然后再学习指针。 函数是从英文function翻译过来的&#xff0c;其实function在英文中的意思就是函数&#xff0c;也是功能的意思&#xf…

UE4运用C++和框架开发坦克大战教程笔记(十九)(第58~60集)完结

UE4运用C和框架开发坦克大战教程笔记&#xff08;十九&#xff09;&#xff08;第58~60集&#xff09;完结 58. 弹窗显示与隐藏59. UI 面板销毁60. 框架完成与总结 58. 弹窗显示与隐藏 这节课我们先来补全 TransferMask() 里对于 Overlay 布局类型面板的遮罩转移逻辑&#xff…

C++,stl,栈stack和队列queue详解

1.栈stack 1.stack基本概念 2.stack常用接口 代码示例&#xff1a; #include<bits/stdc.h> using namespace std;int main() {stack<int> stk;stk.push(7);stk.push(9);stk.push(5);cout << "栈的size为&#xff1a;" << stk.size() <…

【STL】list模拟实现

vector模拟实现 一、接口大框架函数声明速览二、结点类的模拟实现1、构造函数 三、迭代器类的模拟实现1、迭代器类存在的意义2、迭代器类的模板参数说明3、构造函数4、运算符的重载&#xff08;前置和后置&#xff09;&#xff08;1&#xff09;前置&#xff08;2&#xff09;后…

【Web】vulhub Shiro-550反序列化漏洞复现学习笔记

目录 Shiro简介 复现流程 工具一把梭 半脚本半手动 原理分析 反序列化入口 常见的key 登录过程 验证过程 利用原理 Shiro简介 Apache Shiro 是一个强大且易于使用的 Java 安全框架&#xff0c;用于身份验证、授权、加密和会话管理等安全功能。Shiro 的设计目标是简单…

【Spring】springmvc如何处理接受http请求

目录 ​编辑 1. 背景 2. web项目和非web项目 3. 环境准备 4. 分析链路 5. 总结 1. 背景 今天开了一篇文章“SpringMVC是如何将不同的Request路由到不同Controller中的&#xff1f;”&#xff1b;看完之后突然想到&#xff0c;在请求走到mvc 之前服务是怎么知道有请求进来…

大模型是如何实现Function Call函数调用的?

▼最近直播超级多&#xff0c;预约保你有收获 近期直播&#xff1a;《Agent 企业级应用案例实战》 —1— 大模型如何实现函数调用&#xff1f; 大模型要实现精确的函数调用&#xff08;Function Call&#xff09;需要理解能力和逻辑能力&#xff0c;理解能力就是对用户的 Prom…