生命之树

在X森林里,上帝创建了生命之树。
他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。
上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列 {a, v1, v2, …, vk, b} 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。
在这个前提下,上帝要使得S中的点所对应的整数的和尽量大。
这个最大的和就是上帝给生命之树的评分。
经过atm的努力,他已经知道了上帝给每棵树上每个节点上的整数。但是由于 atm 不擅长计算,他不知道怎样有效的求评分。他需要你为他写一个程序来计算一棵树的分数。

「输入格式」
第一行一个整数 n 表示这棵树有 n 个节点。
第二行 n 个整数,依次表示每个节点的评分。
接下来 n-1 行,每行 2 个整数 u, v,表示存在一条 u 到 v 的边。由于这是一棵树,所以是不存在环的。

「输出格式」
输出一行一个数,表示上帝给这棵树的分数。

「样例输入」
5
1 -2 -3 4 5
4 2
3 1
1 2
2 5

「样例输出」
8

「数据范围」
对于 30% 的数据,n <= 10
对于 100% 的数据,0 < n <= 10^5, 每个节点的评分的绝对值不超过 10^6 。
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 3000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

解析:我们简要分析之后可以发现这是一棵无向赋权图,要求是寻找一棵最大的生成树。这里采用dfs()+松弛进行求解。
v数组代表每个节点的评分,如果从 i 节点与 j 节点的权值和大于 i 结点本身的权值,那么更新i结点的权值,直达找出一条能够连接权值最大的路径。

import java.util.Scanner;public class Main {static int n;static int[] v;static int[][] arr;static boolean[] vis;static int max = 0;public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();v = new int[n+1];arr = new int[n+1][n+1];vis = new boolean[n+1];for (int i = 1; i <= n; i++) {v[i] = in.nextInt();}for (int i = 1; i < n; i++) {int a = in.nextInt();int b = in.nextInt();arr[a][b] = 1;arr[b][a] = 1;}dfs(1);System.out.println(max);}private static void dfs(int m) {vis[m] = true;for (int i = 1; i <= n; i++) {if (vis[i] == false && arr[m][i] != 0) {dfs(i);if (v[m] < (v[m] + v[i])) {v[m] = v[m] +v[i];}max = Math.max(max, v[m]);}}}
}

蓝桥杯第六届省赛JAVA真题----生命之树相关推荐

  1. 蓝桥杯第六届国赛JAVA真题----切开字符串

    标题:切开字符串 Pear有一个字符串,不过他希望把它切成两段. 这是一个长度为N(<=10^5)的字符串. Pear希望选择一个位置,把字符串不重复不遗漏地切成两段,长度分别是t和N-t(这两 ...

  2. 蓝桥杯第六届省赛JAVA真题----垒骰子

    垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...

  3. 蓝桥杯第六届国赛JAVA真题----表格计算

    标题:表格计算 某次无聊中, atm 发现了一个很老的程序.这个程序的功能类似于 Excel ,它对一个表格进行操作. 不妨设表格有 n 行,每行有 m 个格子. 每个格子的内容可以是一个正整数,也可 ...

  4. 蓝桥杯第六届国赛JAVA真题----奇怪的数列

    标题:奇怪的数列 从X星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 .... YY博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都 ...

  5. 蓝桥杯第六届国赛JAVA真题----密文搜索

    标题:密文搜索 福尔摩斯从X星收到一份资料,全部是小写字母组成. 他的助手提供了另一份资料:许多长度为8的密码列表. 福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的. 请你编写一个程序,从第一 ...

  6. 蓝桥杯第六届省赛JAVA真题----打印菱形

    打印菱形 给出菱形的边长,在控制台上打印出一个菱形来. 为了便于比对空格,我们把空格用句点代替. 当边长为8时,菱形为: .......* ......*.* .....*...* ....*.... ...

  7. 蓝桥杯第六届省赛JAVA真题----循环节长度

    循环节长度 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153-.. 其循环节为[846153] 共有6位. 下面的方法,可以求出 ...

  8. 蓝桥杯第七届省赛JAVA真题----压缩变换

    压缩变换 小明最近在研究压缩算法. 他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比. 然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面 ...

  9. 蓝桥杯第七届省赛JAVA真题----剪邮票

    剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...

最新文章

  1. Nat. Commun. | 序列到功能的深度学习框架加速工程核糖调节剂设计和优化
  2. 影像组学视频学习笔记(37)-机器学习模型判断脑卒中发病时间(文献报告)、Li‘s have a solution and plan.
  3. 高中生获得全国科创大赛一等奖的项目,竟与硕士毕业论文高度雷同?!
  4. android url webview,android - webview获取到当前页面的url
  5. 《深入理解Java虚拟机》笔记3——7种垃圾收集器
  6. 存储过程双层循环_mysql嵌套存储过程实现循环嵌套
  7. Boost:ssl服务测试程序
  8. 为or、in平反——or、in到底能不能利用索引?
  9. html5储存类型,html5本地存储-留言板
  10. 洛谷P1007 独木桥(贪心)
  11. 内存陷阱 驯服C++中的野指针
  12. 深入理解Nginx——链接
  13. 30天敏捷结果(10):发挥你的优势
  14. 注册reg.html是什么,reg命令如何修改注册表?reg命令作用介绍
  15. 学习《图说设计模式》观察者模式
  16. Android Build 获取手机信息
  17. python爬虫实战:猫眼电影我不是药神评论
  18. 二分查找、求上界和下界(包括内置函数lower_bound、和upper_bound的使用)
  19. 用Facebook做广告和营销,你需要注意哪些问题?
  20. orchestrator配置参数详解-Ⅱ

热门文章

  1. linux修改栈指针x86,x86-堆栈指针未填充16时libc的system()导致分段...
  2. 如何拉取k8s镜像_K8s 从懵圈到熟练 – 镜像拉取这件小事
  3. eclipse run on server 点不了finish_分享点经验 | springboot入门及编码
  4. 挑战记忆力-Web前端实现记忆纸牌游戏(JS+CSS)
  5. Web前端期末大作业--响应式电竞博客网页设计(HTML+CSS+JavaScript)实现
  6. 计划任务列表 html,OpenWrt使用crontab执行计划任务
  7. cockroachdb mysql_CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储...
  8. oracle中affirm,2.Oracle Data Guard 参数介绍
  9. oracle会闪,oracle闪来
  10. 如何用计算机装手机系统,如何用手机usb重装电脑系统