题目传送门

题目描述

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

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

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

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

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

输入格式

第一行一个整数N。

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

接下来N-1行,每行输入一对整数L, K,表示K是L的直接上司。

最后一行输入0,0。

输出格式

输出最大的快乐指数。

数据范围

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
0 0

输出样例:

5

树形DP:

就是在树或图上的一种DP,一般是某个父节点或子节点有特殊要求的时候用的一种DP

首先是建图,在图上遍历的时候进行DP操作,对于这道题来说我们用F(i, j)来表示i这个节点,状态为 j (用0来表示不选,用1来表示选)值的最大值,对于每个节点我们有俩种操作:

1.选当前这个节点,j 状态为1,它的子节点只能不选,所以f(i, 1) = f(i, 1) + f(u, 0)(u表示 i 的子节点)

2.不选当前这个节点,j 的状态为0,它的子节点可以选,也可以不选,取俩者的最大值

所以f(i, 0) = f(i, 0) + max(f(u, 1), f(u, 0))(u表示 i 的子节点)

3.从任意一个跟节点开始搜索,所以还需要一个数组来储存哪些节点有父节点

#include<iostream>
#include<cstring>
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 vis[N];
void add(int a, int b)//添加边
{e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
void dfs(int cur)//搜索,树形DP
{f[cur][1] = happy[cur];for(int i = h[cur]; i != -1; i = ne[i]){//遍历子节点int j = e[i];dfs(j);f[cur][0] += max(f[j][0], f[j][1]);f[cur][1] += f[j][0];}
}
int main()
{cin >> n;for(int i = 1; i <= n; i++)cin >> happy[i];//输入memset(h, -1, sizeof h);for(int i = 0; i < n - 1; i++){int a, b;cin >> a >> b;vis[a] = true; //表示a有父节点 add(b, a);}int root = 1;while(vis[root])root++;///找到一个根节点dfs(root);cout << max(f[root][0], f[root][1]);return 0;
}

AcWing285. 没有上司的舞会(树形DP)题解相关推荐

  1. 洛谷 P1352 没有上司的舞会(树形 DP)

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  2. AcWing323. 战略游戏(树形DP)题解

    题目传送门 题目描述 鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他找不到解决问题的方法,这让他很伤心. 现在他有以下问题. 他必须保护一座中世纪城市,这条城市的道路构成了一棵树. 每个节点上的士兵可以 ...

  3. AcWing1075. 数字转换(树形DP)题解

    题目传送门 如果一个数 x 的约数之和 y(不包括他本身)比他本身小,那么 x 可以变成 y,y 也可以变成 x. 例如,4 可以变为 3,1 可以变为 7. 限定所有数字变换在不超过 n 的正整数范 ...

  4. AcWing1072. 树的最长路径(树形DP)题解

    题目传送门 题目描述 给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值. 现在请你找到树中的一条最长路径. 换句话说,要找到一条路径,使得使得路径两端的点的距离最 ...

  5. AcWing1073.树的中心(树形DP)题解

    题目传送门 题目描述 给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值. 请你在树中找到一个点,使得该点到树中其他结点的最远距离最近. 输入格式 第一行包含整数 ...

  6. AcWing1077. 皇宫看守(树形DP)题解

    题目传送门 题目描述 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状,某些宫殿间可以互相望见. 大内保卫森严,三步一岗,五步一哨,每个宫殿 ...

  7. AcWing1074. 二叉苹果树(树形DP)题解

    题目传送门 题目描述 有一棵二叉苹果树,如果树枝有分叉,一定是分两叉,即没有只有一个儿子的节点. 这棵树共 N 个节点,编号为 1 至 N,树根编号一定为 1. 我们用一根树枝两端连接的节点编号描述一 ...

  8. layui树形父子不关联_DP专题7 | 没有上司的舞会 洛谷1352(树形DP)

    高能预警:这是一篇超过5分钟的学习文章,暑假了可以多学会 本篇继续咱们的DP专题,树形DP入门.动态规划每一个类型的DP都是深坑,期望童鞋们自己在这个系列的基础上多花时间进行拓展,学习愉快~ 在讨论树 ...

  9. 洛谷P1352 没有上司的舞会(树形DP水题)

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

最新文章

  1. mongodb转实体对像_MongoDB 计划从“Data Sprawl”中逃脱
  2. 一些java基本程序图解2
  3. 从零开始Vue项目实战(二)-搭建环境
  4. 【干货】极简体验+免费真的万能嘛?北森Saas第一坑:免费
  5. 在DataGrid中將RowHeader 加上文字...
  6. [原]Threads vs Processes in Linux 分析
  7. Wireshark图解教程
  8. 【2018山东省赛 - A】Anagram(贪心,费用流,KM算法)
  9. 多个数据文件 mysql_mysql多实例(多个配置文件方式)
  10. 第一阶段冲刺 第三天
  11. C语言之文件读写探究(一):fopen、fclose(文件的打开和关闭)
  12. 【探索PowerShell 】【七】变量
  13. radio按钮样式美化和checkbox按钮样式美化
  14. strdup linux,内存管理 – Linux内核API kstrdup
  15. python倒三角代码_vb代码输出倒三角形 python倒三角代码
  16. C语言课后练习题第二章
  17. RDKit 安装教程
  18. web前端常用开发工具有哪些?
  19. 易支付源码 28k支付第四方支付源码-Oreo支付系统
  20. 为什么当函数值为定值时,梯度垂直于等值面?

热门文章

  1. JSon_零基础_005_将po(bean)对象转换为JSon格式的对象字符串,返回给界面
  2. Binutils工具集中的一些比较常用的工具
  3. ComboBox信息读取
  4. html是超文本标记语言标签,main标签
  5. web中“/”写在不同地方时的值不同
  6. B3403 [Usaco2009 Open]Cow Line 直线上的牛 deque
  7. 构造函数和析构函数的作用,面向对象的三大特征
  8. Vmware workstation 安装解压 vmwaretools 提示只读文件
  9. (二)html常用标签
  10. wince内存配置(转gooogleman的工作日志)