蓝桥杯第六届省赛JAVA真题----生命之树
生命之树
在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真题----生命之树相关推荐
- 蓝桥杯第六届国赛JAVA真题----切开字符串
标题:切开字符串 Pear有一个字符串,不过他希望把它切成两段. 这是一个长度为N(<=10^5)的字符串. Pear希望选择一个位置,把字符串不重复不遗漏地切成两段,长度分别是t和N-t(这两 ...
- 蓝桥杯第六届省赛JAVA真题----垒骰子
垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...
- 蓝桥杯第六届国赛JAVA真题----表格计算
标题:表格计算 某次无聊中, atm 发现了一个很老的程序.这个程序的功能类似于 Excel ,它对一个表格进行操作. 不妨设表格有 n 行,每行有 m 个格子. 每个格子的内容可以是一个正整数,也可 ...
- 蓝桥杯第六届国赛JAVA真题----奇怪的数列
标题:奇怪的数列 从X星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 .... YY博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都 ...
- 蓝桥杯第六届国赛JAVA真题----密文搜索
标题:密文搜索 福尔摩斯从X星收到一份资料,全部是小写字母组成. 他的助手提供了另一份资料:许多长度为8的密码列表. 福尔摩斯发现,这些密码是被打乱后隐藏在先前那份资料中的. 请你编写一个程序,从第一 ...
- 蓝桥杯第六届省赛JAVA真题----打印菱形
打印菱形 给出菱形的边长,在控制台上打印出一个菱形来. 为了便于比对空格,我们把空格用句点代替. 当边长为8时,菱形为: .......* ......*.* .....*...* ....*.... ...
- 蓝桥杯第六届省赛JAVA真题----循环节长度
循环节长度 两个整数做除法,有时会产生循环小数,其循环部分称为:循环节. 比如,11/13=6=>0.846153846153-.. 其循环节为[846153] 共有6位. 下面的方法,可以求出 ...
- 蓝桥杯第七届省赛JAVA真题----压缩变换
压缩变换 小明最近在研究压缩算法. 他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比. 然而,要使数值很小是一个挑战. 最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面 ...
- 蓝桥杯第七届省赛JAVA真题----剪邮票
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...
最新文章
- Nat. Commun. | 序列到功能的深度学习框架加速工程核糖调节剂设计和优化
- 影像组学视频学习笔记(37)-机器学习模型判断脑卒中发病时间(文献报告)、Li‘s have a solution and plan.
- 高中生获得全国科创大赛一等奖的项目,竟与硕士毕业论文高度雷同?!
- android url webview,android - webview获取到当前页面的url
- 《深入理解Java虚拟机》笔记3——7种垃圾收集器
- 存储过程双层循环_mysql嵌套存储过程实现循环嵌套
- Boost:ssl服务测试程序
- 为or、in平反——or、in到底能不能利用索引?
- html5储存类型,html5本地存储-留言板
- 洛谷P1007 独木桥(贪心)
- 内存陷阱 驯服C++中的野指针
- 深入理解Nginx——链接
- 30天敏捷结果(10):发挥你的优势
- 注册reg.html是什么,reg命令如何修改注册表?reg命令作用介绍
- 学习《图说设计模式》观察者模式
- Android Build 获取手机信息
- python爬虫实战:猫眼电影我不是药神评论
- 二分查找、求上界和下界(包括内置函数lower_bound、和upper_bound的使用)
- 用Facebook做广告和营销,你需要注意哪些问题?
- orchestrator配置参数详解-Ⅱ
热门文章
- linux修改栈指针x86,x86-堆栈指针未填充16时libc的system()导致分段...
- 如何拉取k8s镜像_K8s 从懵圈到熟练 – 镜像拉取这件小事
- eclipse run on server 点不了finish_分享点经验 | springboot入门及编码
- 挑战记忆力-Web前端实现记忆纸牌游戏(JS+CSS)
- Web前端期末大作业--响应式电竞博客网页设计(HTML+CSS+JavaScript)实现
- 计划任务列表 html,OpenWrt使用crontab执行计划任务
- cockroachdb mysql_CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储...
- oracle中affirm,2.Oracle Data Guard 参数介绍
- oracle会闪,oracle闪来
- 如何用计算机装手机系统,如何用手机usb重装电脑系统