问题描述

有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少?

输入格式

第一行包含一个整数 n 。

接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值。

接下来一共 n-1 行,每行描述树上的一条边。

输出格式

输出一个整数,代表选出的点的权值和的最大值。

样例输入

5
1 2 3 4 5
1 2
1 3
2 4
2 5

样例输出

12

样例说明

选择3、4、5号点,权值和为 3+4+5 = 12 。

数据规模与约定

对于20%的数据, n <= 20。

对于50%的数据, n <= 1000。

对于100%的数据, n <= 100000。

权值均为不超过1000的正整数。

分析:题目给出的数据不一定是二叉树,所以可以看作图来处理~其实就是用邻接表存储啦~v[i]数组中保存i结点的孩子节点们~dp[i][0]表示不取i结点的结果~dp[i][1]表示取i结点的结果~

用深度优先搜索+动态规划,每个点的最大权值有取当前这个点和不取当前这个点两种情况~如果取当前点,则不能取与它相邻的任何点;不取当前点,则取与它相邻点的最大值进行累加~从底向上累加到顶部~max(dp[1][0], dp[1][1])就是所求结果~

用一个变量pre保存当前结点的前一个结点~如果等于pre说明访问到了它的父亲结点,为了防止重复访问,要在v[node][i]不等于pre时候继续dfs下去~否则可能会形成无限循环的环~

#include <iostream>
#include <vector>
using namespace std;
int dp[100010][2];
vector<vector<int> > v;
void dfs(int node, int pre) {for (int i = 0; i < v[node].size(); i++) {int temp = v[node][i];if (temp != pre) {dfs(temp, node);dp[node][0] += max(dp[temp][0], dp[temp][1]);dp[node][1] += dp[temp][0];}}
}
int main() {int n, a, b;scanf("%d", &n);for (int i = 1; i <= n; i++)scanf("%d", &dp[i][1]);v.resize(n + 1);for (int i = 1; i <= n - 1; i++) {scanf("%d%d", &a, &b);v[a].push_back(b);v[b].push_back(a);}dfs(1, 0);cout << max(dp[1][0], dp[1][1]);return 0;
}

蓝桥杯 ALGO-4 算法训练 结点选择相关推荐

  1. 蓝桥杯:试题 算法训练 Remember the A La Mode

    蓝桥杯:试题 算法训练 Remember the A La Mode 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参 ...

  2. 矩阵乘法 算法训练 试题_蓝桥杯习题集_ 算法训练 矩阵乘法

    原文: 算法训练 矩阵乘法 时间限制:1.0s   内存限制:512.0MB 问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s, ...

  3. 蓝桥杯 算法训练 结点选择

    问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多少? 输入格式 第一行包含一个整数 n . 接下来的 ...

  4. 蓝桥杯:试题 算法训练 采油区域 矩阵前缀和+动态规划+分治+枚举

    资源限制 时间限制:2.0s 内存限制:512.0MB 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M× ...

  5. 蓝桥杯练习系统算法训练习题加答案java版本

    附上百度文库的链接:http://wenku.baidu.com/view/afb78d36b42acfc789eb172ded630b1c59ee9bf7 转载于:https://www.cnblo ...

  6. java蓝桥杯的题_Java蓝桥杯试题集——算法训练ALGO-116——最大的算式

    题目要求 解题思路 动态规划,今天才弄明白QAQ,借鉴了这位大佬的博客,曹磊的博客 写的很好!但是我觉得我的循环方式更容易理解嘿嘿嘿~ 首先建立如下图的数组,行数代表前几位数,列数代表有几个乘号.将第 ...

  7. 蓝桥杯练习系统—算法训练 s01串

    第一部分:题目 问题描述 s01串初始为"0" 按以下方式变换 0变1,1变01 输入格式 1个整数(0~19) 输出格式 n次变换后s01串 样例输入 3 样例输出 101 数据 ...

  8. 蓝桥杯-黑色星期五(算法训练)

    题目描述: 有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是"诸事不宜".请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是1 ...

  9. 【算法】【蓝桥杯】试题 算法训练 黑心药商 ALGO-1002

    题目 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 JiaoShou消灭了百变怪,为爱琳世界赢得了和平,但他突然发现自己没有升级,这就意味着必须去喝药补血.爱琳世界的NPC卖的药已 ...

最新文章

  1. Linux KVM迁移与存储
  2. JavaScript实现重置表单(reset)的方法
  3. linux网络编程一:主机字节序与网络字节序的的判断
  4. binarytreenode”使用 类 模板 需要 模板 参数列表_c++1117 模板核心知识(一)—— 函数模板...
  5. 用狄拉克函数来构造非光滑函数的光滑近似
  6. vista磁盘使用100%_如何在Windows 7或Vista中创建和使用密码重置磁盘
  7. (七)nodejs循序渐进-模块系统(进阶篇)
  8. hadoop上传文件java_hadoop入门之通过java代码实现将本地文件上传到hadoop的文件系统...
  9. 荣耀V40 Pro全新外观曝光:熟悉的矩阵镜头造型
  10. JS将字符串yyyyMMddHHmmss转Date
  11. AX向在线用户发送消息
  12. OAuth 2.0 in Web API #Reprinted
  13. Alpha,Beta,RC,RTM,EVAL,CTP,OEM,RTL,VOL
  14. c语言 运行库 下载,Visual C++运行库合集
  15. FastAPI 教程翻译 - 介绍
  16. Opencores 无法点击submit的问题解决方案
  17. 网站域名有哪些不同的种类?
  18. 亚像素边缘检测提取算法的实现
  19. R:基于每股权益的量化分析 —— PEG估值法
  20. Why you should not shrink your data files

热门文章

  1. Android应用如何反馈Crash报告
  2. 使用单例模式实现自己的HttpClient工具类
  3. 翻译|How to Export a Connected Component
  4. Service绑定模式
  5. NERDTree 快捷键辑录
  6. AAuto如何设置定时器
  7. cuzysdk version 3.1 更新说明
  8. sublime theme color
  9. 研究员发现macOS 版本Safari 浏览器中的严重漏洞,获奖10.5万美元
  10. 专家从美国联邦政府机构网络上发现后门