小Biu的树(树形dp)

2023-11-19

小Biu的树(树形dp)

题目描述

小Biu有一颗有根树,树上有n个节点(编号1~n)。其中每个节点有一个苹果,每个苹果有一定的能量,现在小Biu和小Piu分别选出一棵子树,要求两棵子树不能相交而且所有苹果的能量和最大。

输入

第一行输入一个正整数 n(1 <= n <= 10^5),表示树的结点个数。
第二行输入n个数,为 n个苹果的能量值 a[i](-10^4 <= a[i] <= 10^4)。
接下来 n – 1每行输入两个数 u 和 v (1 <= u,v <= n),表示 u 和 v 之间有一条边。
保证 1 号结点为根节点。

输出

如果找不出两颗不相交的子树,输出 Impossible。
否则,输出找出的两颗不相交子树所有苹果的能量和。

样例输入 Copy

8 
0 5 -1 4 3 2 6 5 
1 2 
2 4 
2 5 
1 3 
3 6 
6 7
6 8

样例输出 Copy

25

提示


如图所示,分别选出4-2-5和7-6-8两棵子树,则所得能量和最大。
能量和=4+5+3+6+2+5=25

对于25%的数据,1<=n<=10
对于50%的数据,1<=n<=100
对于75%的数据,1<=n<=1000
对于100%的数据,1<=n<=100000

思路:求两颗不相交的子树,最大的权值和。关键是判断相交。如果dp[x]!=-inf,则可以更新答案。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <string>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <ctime>
#include <vector>
#include <fstream>
#include <list>
#include <iomanip>
#include <numeric>
using namespace std;
 
#define rep(i , a , b) for(register int i=(a);i<=(b);i++)
#define per(i , a , b) for(register int i=(a);i>=(b);i--)
#define ms(s) memset(s, 0, sizeof(s))
#define squ(x) (x)*(x)
 
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll , ll> pi;
typedef unordered_map<int,int> un_map;
typedef priority_queue<int> prque;
 
template<class T>
inline void read (T &x) {
    x = 0;
    int sign = 1;
    char c = getchar ();
    while (c < '0' || c > '9') {
        if ( c == '-' ) sign = - 1;
        c = getchar ();
    }
    while (c >= '0' && c <= '9') {
        x = x * 10 + c - '0';
        c = getchar ();
    }
    x = x * sign;
}
 
const int maxn = 1e6 + 10;
const int inf = 0x3f3f3f3f;
const ll INF = ll(1e18);
const int mod = 1e9+7;
const double PI = acos(-1);
//#define LOCAL
 
int n;
ll a[maxn];
std::vector<int> e[maxn];
ll ans =-INF;
ll dp[maxn];
ll sum[maxn];
 
void dfs(int x,int fa) {
    int siz = e[x].size();
    sum[x]=a[x];
    rep(i,0,siz-1) {
        int y = e[x][i];
        if(y==fa) continue;
        dfs(y,x);
        sum[x]+=sum[y];
        if(dp[x]>-INF) ans=max(ans,dp[x]+dp[y]);
        dp[x]=max(dp[x],dp[y]);
    }
    dp[x]=max(dp[x],sum[x]);
}
int main(int argc, char * argv[])
{
    #ifdef LOCAL
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
    #endif
    read(n);
    rep(i,1,n) read(a[i]);
    rep(i,1,n-1) {
        int x,y;
        read(x);read(y);
        e[x].push_back(y);
        e[y].push_back(x);
    }
    rep(i,1,n) dp[i]=-INF;
    dfs(1,-1);
    if(ans==INF) puts("Impossible");
    else printf("%lld\n",ans);
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小Biu的树(树形dp) 的相关文章

  • 配置OBS存储功能、新搭建obs

    通过应用开发环境与OBS Object based Storage Service 对接 实现对象或者Widget资产存储功能 背景信息 对象存储服务 Object based Storage Service OBS 是一个基于对象的海量存
  • [LeetCode-03]-Longest Substring Without Repeating Characters

    文章目录 题目相关 Solution 每周完成一个ARTS Algorithm Review Tip Share ARTS Algorithm 每周至少做一个 leetcode 的算法题 Review 阅读并点评至少一篇英文技术文章 Tip
  • ChatGPT追祖寻宗:GPT-2论文要点解读

    论文地址 Language Models are Unsupervised Multitask Learners 上篇 GPT 1论文要点解读 在上篇 GPT 1论文要点解读中我们介绍了GPT1论文中的相关要点内容 其实自GPT模型诞生以来
  • jsp 九大内置对象和其作用以及四大域对象

    感谢作者 Fangcf 链接 https blog csdn net qq 39320833 article details 80818442 一 jsp 九大内置对象 方法简单介绍 https blog csdn net pan junb
  • 1480. Running Sum of 1d Array

    class Solution public vector
  • pytorch argmax代码示例以及图解,很容易理解

    官网例子 gt gt gt a torch randn 4 4 gt gt gt a tensor 1 3398 0 2663 0 2686 0 2450 0 7401 0 8805 0 3402 1 1936 0 4907 1 3948
  • 服务器设置运行游戏,森林正式版服务器怎么设置 森林游戏专用服务器设置教程-游侠网...

    serverAutoSaveInterval15 Gamedifficulty mode Must be set to Peaceful Normal or Hard 游戏难度 必须设置成和平 Peaceful 一般 Normal或困难 H
  • 浅析『链上数据分析』 : 区块链 + 数据分析

    什么是链上数据分析 01 区块链 02 链上数据 03 为什么要分析链上数据 04 数据分析思维 05 数据分析技能 06 数据分析工具 07 业务逻辑理解 什么是链上数据分析 链上数据分析 顾名思义 就是对区块链上的数据进行分析 其实就是
  • StringBuilder类解析

    StringBuilder 构建字符串 有时候我们需要来不断拼接小的字符串来满足我们的需求 如果用字符串拼接的方法 效率会比较低 此时StringBuilder类为我们提供了便捷 下面是一些它的常用方法 StringBuilder stri
  • anaconda,cuda,torch,lightning的安装

    本博客仅作为初学者参考使用 汇总了多位大牛的博客 如有侵权请联系我删除 anaconda cuda torch lightning的安装 1 Anaconda 2 cuda 3 pytorch 4 lightning 5 解决pip执行后导
  • COCO数据集格式(详解)及COCO标注可视化。json转COCO等代码

    coco数据集JSON文件格式分为一下几个字段 info info dict licenses license list 内部是dict images image list 内部是dict annotations annotation li
  • Qt之QGraphicsView入门篇

    作者 billy 版权声明 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 简介 在Qt界面库中 对于图形的绘制 可以使用 QPainter 实现普通二维图形的绘制 该方法在 paintEvent 事件里编写绘图程序 其
  • 对人工智能芯片的一些看法

    人工智能芯片 2016年 随着阿尔法狗击败专业人类围棋棋手 已 深度学习 为基础的人工智能技术被大众所熟知 其实 深度学习 技术已经发展了有近30年的历史了 现在的 深度学习 的实现以神经网络技术为主 神经网络通过模拟大脑生物神经网络的连接
  • [OpenGL ES 06]使用VBO:顶点缓存

    OpenGL ES 06 使用VBO 顶点缓存 罗朝辉 http www cnblogs com kesalin 本文遵循 署名 非商业用途 保持一致 创作公用协议 这是 OpenGL ES 教程 的第六篇 前五篇请参考如下链接 OpenG
  • 数据库中连接(join)运算

    摘自 数据库原理与应用 第2版 宋金玉 陈萍 陈刚编著
  • Java学习前言—JDK、JRE、IntelliJ IDEA

    一 jdk java developer kit 与 jre java runtime environment 1 jdk是Java开发工具包 安装后可以编写Java程序 2 jre是Java运行环境 安装后可以运行Java程序 二 Ubu
  • Python爬虫工程师都需要掌握那些知识

    Python爬虫工程师都需要掌握那些知识 今天老师跟大家聊聊Python爬虫工程师需要掌握的知识 Python语言无论是在学术上还是就业上现在都非常受欢迎 很多都在学习Python 因为Python不仅能够做大数据分析 爬虫 云计算 还能做
  • SpringBoot 打 jar包和打war 包配置

    文章目录 1 前言 2 SpringBoot 打 jar 包 3 SpringBoot 打 war 包 4 小结 1 前言 目前我们熟知的SpringBoot 打包方式 一共分为两种 一种是打jar 包 内置tomcat 方式 yml 里的
  • 因果关系基本概念:后门标准

    阅读David Salazar的文章Causality To adjust or not to adjust后的笔记 文章目录 动机 实例 动机 在前面的文章中 我们知道就算控制再多的变量 也不一定能准确估计 采用后门标准 backdoor
  • 太阳神三国杀源代码 HOW TO BUILD

    HOW TO BUILD Tips stands for the folder where the repo is in VS2013 Windows Download the following packages 1 QT librari

随机推荐

  • 2016年1月15日(DEMO12-2ALPHA混合。)

    简而言之 alpha混合就是透明度 计算 Final src1 alpha src2 1 alpha 分解成RGB分量同样适用 其中 src1和src2为RGB格式 长16位 混合因子 0 255 长8位 创建alpha查找表 For 0到
  • Android插件:关闭WIFI下微信朋友圈视频自动播放插件开发过程详解

    本文将会详细介绍怎么开发一个屏蔽微信 7 0 5 朋友圈WIFI下自动播放视频插件 背景介绍 周五下班在地铁上刷微信时看到一个新闻 说是微信更新后在WIFI下自动播放视频还没法关闭 这个问题前几天我也遇到了 但是我记得设置里边有一个工作可以
  • 【代码随想录】回溯算法刷题

    代码随想录 回溯算法 组合 组合总和 III 电话号码的字母组合 组合总和 I 组合总和 II 分隔回文串 复原 IP 地址 子集 I 子集 II 递增子序列 全排列 I 全排列 II 重新安排行程 hard N 皇后 hard 解数独 h
  • js里map和reduce的用法

    map和reduce let arr 1 5 7 8 5 1 let arrNew arr map item gt item 2 console log map结果 arrNew 2 let arrNews for let i 0 i
  • 浅析Spring.NET(一):Spring.NET及简单使用

    浅析Spring NET 文章目录 浅析Spring NET 一 Spring NET 简单使用 1 什么是 Spring NET 2 快速创建第一个使用 Spring NET 的程序 注意事项 一 Spring NET 简单使用 最近用到
  • 数据库第七周【第五章作业存储过程】

    本章的作业题目来自第八章 T SQL建立存储过程的标准形式 Create procedure
  • Ubuntu16.04系统下安装osg3.7+osgearth3.3

    Ubuntu16 04系统下安装osg3 7 osgearth3 4 前言 安装背景 安装全过程 前置库的准备 更新CMake 升级gcc 升级gdal sqlite3安装 PROJ安装 Poppler安装 freetype安装 安装ope
  • 个人整理的数据集(手写中文数据、发票数据、快递单数据、车牌数据)

    本人在工作生活中收集了各个方面比较多的真实的数据集如下 一 手写中文数据集 1 档案类数据 此数据集为手写档案数据 数量较大 大约128G 图像均未标注 ex 2 手写作文数据 此数据集为手写作文数据 是大约800M左右 图像按行提供位置和
  • 1081 检查密码

    本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能 该网站要求用户设置的密码必须由不少于6个字符组成 并且只能有英文字母 数字和小数点 还必须既有字母也有数字 输入格式 输入第一行给出一个正整数 N 100 随后 N 行 每行给
  • python判断一个数是奇数还是偶数_在python中检查一个数字是奇数还是偶数

    参见英文答案 gt python checking odd even numbers and changing outputs on number size 15个 我正在尝试制作一个程序 检查一个单词是否是一个回文并且我已经到目前为止它可
  • 基于依存句法分析的实体关系提取

    基于依存句法分析的实体关系提取 1 概述 概述 句法分析是自然语言处理中的关键技术之一 其基本任务是确定句子的句法结构或者句子中词汇之间的依存关系 主要包括两方面的内容 一是确定语言的语法体系 即对语言中合法的句子的语法结构给与形式化的定义
  • 简明阐述MinGW,MSYS,MSYS2

    几年前的一个项目连同环境 不小心被我从硬盘上不可恢复的删掉了 为了挽救 没头苍蝇似的在网上闯荡了几天 发现自己以前对MinGW的理解有着很大的误区 本文不是攻略 只是希望以更简洁 清晰的描述 来帮助大家理解MinGW 防止重蹈我的覆辙 一
  • 小鼠脑立体定位图谱_超高分辨率小鼠脑三维图谱发布——脑研究者的屠龙刀

    大脑 作为生命活动的司令部 是结构和功能最为复杂的一种器官 因此 识别脑的三维结构 对于脑科学研究至关重要 然而由于技术的限制和脑结构的复杂性 多数脑形态结构图谱绘制工作局限于二维层面 高精度的小鼠脑三维参考图谱仍然进展缓慢 来自于ALLE
  • LastPass即将收费,是时候更换一款先得密码管理工具了!

    作者 弗拉德 来源 弗拉德 公众号 fulade me 前几天收到了LastPass的邮件 自2021年3月16日起 不再提供全平台的免费服务 用户只能选择一个平台享受免费 iOS Android 或者 PC端 邮件里还提到 购买会员享受2
  • C++——String类的增删查改

    目录 前言 1 String类的增删查改 1 1增 实验代码 运行结果 实验代码 运行结果 编辑 1 2删 实验代码 结果 1 3查找 练习 查找文件后缀 运行结果 1 4 改 前言 上篇博客中 我介绍了String类的基本成员函数 这些函
  • 存地失人,人地皆失;存人失地,人地皆存。

    存地失人 人地皆失 存人失地 人地皆存 埋骨何须桑梓地 人生无处不青山 出自近现代毛泽东的 七绝 改西乡隆盛诗赠父亲 孩儿立志出乡关 学不成名誓不还 埋骨何须桑梓地 人生无处不青山
  • 华为上机试题4(坐标移动)

    题目来自于http blog csdn net column details huaweicode html page 4 原文均是用的c 我用的java写的 题目描述开发一个坐标计算工具 A表示向左移动 D表示向右移动 W表示向上移动 S
  • 黑马JavaWeb综合案例

    目录 1 功能介绍 2 前期准备 2 1准备数据库 2 2pom文件 2 3mybatis config文件 3 用户登录注册 3 1html页面 3 1 1登录页面 3 1 2注册页面 3 2css文件 3 2 1register css
  • 【ML on Kubernetes】第 7 章:模型部署和自动化

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 小Biu的树(树形dp)

    小Biu的树 树形dp 题目描述 小Biu有一颗有根树 树上有n个节点 编号1 n 其中每个节点有一个苹果 每个苹果有一定的能量 现在小Biu和小Piu分别选出一棵子树 要求两棵子树不能相交而且所有苹果的能量和最大 输入 第一行输入一个正整