首页 > 其他分享 >蓝桥杯2015省B——生命之树

蓝桥杯2015省B——生命之树

时间:2024-03-22 19:58:31浏览次数:24  
标签:int long 蓝桥 record 之树 2015 adj 节点

 蓝桥杯官网

 洛谷

[蓝桥杯 2015 省 B] 生命之树

题目描述

在 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

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int weight[100001] = { 0 };
long long record[100001] = { 0 };
vector<int> adj[100001];
long long max(long long i, int j)
{
  return (i > j)?i:j;
}
void cal(int i, int fa)
{
    record[i] = weight[i];
    for (int j = 0; j < adj[i].size(); j++)
    {
    int k = adj[i][j];
    if(k != fa)
    {
      cal(k, i);
      record[i] += max(record[k], 0);
    }
  }
}
int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> weight[i];
    int m = n;
    while (--m)
    {
        int a, b;
        cin >> a >> b;
        adj[a].push_back(b);
        adj[b].push_back(a);
    }
  cal(1, 0);
  long long Max = 0;
    for(int i = 1; i <= n; i++)
  {
    if(record[i] > Max)
      Max = record[i];
  }
  cout << Max;
    return 0;
}

标签:int,long,蓝桥,record,之树,2015,adj,节点
From: https://blog.csdn.net/mnwdmty0928/article/details/136947801

相关文章

  • P2615 [NOIP2015 提高组] 神奇的幻方
    P2615[NOIP2015提高组]神奇的幻方[NOIP2015提高组]神奇的幻方题目背景NOIp2015提高组Day1T1题目描述幻方是一种很神奇的\(N\timesN\)矩阵:它由数字\(1,2,3,\cdots\cdots,N\timesN\)构成,且每行、每列及两条对角线上的数字之和都相同。当\(N\)为奇数时,我们......
  • 蓝桥杯 python
    目录一、遍历列表1.使用for循环和enumerate()函数实现2.案例代码二、对列表进行统计和计算1.统计数值列表的元素和2.案例代码三、对列表进行排序1.使用列表对象的sort()方法2.使用内置的sorted()函数实现四、列表推导式1.从列表中选择符合条件的元素组成新的列表......
  • 蓝桥杯Java ABC组 AcWing P1020 潜水员
    题目链接:https://www.acwing.com/problem/content/1022/#二维背包#Model#Favorite思路好题!可以让你思考各种背包问题中,对体积的定义不同,则初始化就不同本题求的是是至少需要体积VV......
  • 备战蓝桥杯Day28 - 贪心算法
    一、贪心算法贪心算法(GreedyAlgorithm)是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法在有最优子结构的问题中尤为有效。最优子结构指的是问题的最优解可以由子问题的最优解有效地构造出来。贪心算法与动......
  • 第十四届蓝桥杯大赛软件赛省赛Python 《三国游戏》
    问题描述问题类型排序,贪心算法。问题分析当第i个事件发生时会分别让X,Y,Z增加Ai,Bi,Ci即当某个事件发生时,三国各增加士兵数Ai,Bi,Ci。如果X,Y,Z的其中一个大于另外两个之和,我们认为其获胜。即当n个事件都确定了是否会发生后,存在X,Y,Z中任一大于另外两个之和,则有其中一个国家获......
  • 蓝桥杯-翻转
    """题目来源:https://www.lanqiao.cn/problems/3520/learning/?page=1&first_category_id=1&name=%E7%BF%BB%E8%BD%AC"""importosimportsysimportcopy#请在此输入您的代码n=int(input())#n组测评数据data=[[]foriinrange(n)]for......
  • 蓝桥杯-百亿富翁
    """https://www.lanqiao.cn/problems/1142/learning/"""importosimportsys#请在此输入您的代码n=int(input())a=list(map(int,input().split()))#求右边第一个比其高的楼房编号defright(a,n):#单调栈stack=[]#ans[i]记录右边第一座比......
  • 第十三届蓝桥杯省赛A组
    目录试题A:裁纸刀试题C:质因数个数埃拉托斯特尼筛法求素数试题J:数的拆分题解试题A:裁纸刀分析:可以举几个例子出来发现规律是:4+(m-1)+(n-1)m;4表示边缘4刀,m-1表示横着切的数量,(n-1)m表示竖着切的数量结果:4+19+21*20=443试题C:质因数个数埃拉托斯特尼筛法求素数分析:先列......
  • 蓝桥杯——盾神与格子游戏(动态规划+递推)
    资源限制内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s问题描述在盾神很小很小还不会怎样编程的时候,他迷上了一款风靡一时的双人游戏!游戏双方在地上画n个格子,然后在最后一格放上一颗石头。每人每轮可以把石头向前移动1到3格,最后谁把......
  • 管道(蓝桥杯)
    有一根长度为\(len\)的横向的管道,该管道按照单位长度分为\(len\)段,每一段的中央有一个可开关的阀门和一个检测水流的传感器。一开始管道是空的,位于\(L_i\)的阀门会在\(S_i\)时刻打开,并不断让水流入管道。对于位于\(L_i\)的阀门,它流入的水在\(T_i\)(\(T_i\geS_i\))时......