首页 > 其他分享 >P1122 最大子树和

P1122 最大子树和

时间:2023-03-12 19:13:00浏览次数:48  
标签:子树 const 最大 int ch P1122 dp define

P1122 最大子树和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目就是要求:树上点权之和最大的一个连通分量

令dp[i]为必须选i节点的情况下,最大的子树点权和

则有转移方程 dp[x]+=max(dp[v],0);

初始化dp[x]=a[x];

注意:最后的答案显然不是dp[1],而是最大的dp[x];

Code:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mp make_pair
#define pb push_back   
#define popb pop_back  
#define fi first
#define se second
const int N=2e4+10;
//const int M=;
//const int inf=0x3f3f3f3f;     
const ll INF=0x3ffffffffffff;
int T,n,a[N],dp[N];
vector<int> g[N];
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*f;
}
void dfs(int x,int fa)
{
    dp[x]=a[x];
    for(auto v:g[x])
    {
        if(v==fa) continue;
        dfs(v,x);
        if(dp[v]>0) dp[x]+=dp[v]; 
    }
}
int main()
{
//    freopen("","r",stdin);
//    freopen("","w",stdout);
    n=read();
    for(int i=1;i<=n;i++) a[i]=read();
    for(int i=1;i<n;i++)
    {
        int u=read(),v=read();
        g[u].pb(v);
        g[v].pb(u);
    }
    dfs(1,0);
    ll ans=-INF;
    for(int i=1;i<=n;i++) ans=max(ans,1LL*dp[i]); 
    printf("%d",ans);
    return 0;
}

 

标签:子树,const,最大,int,ch,P1122,dp,define
From: https://www.cnblogs.com/Willette/p/17208770.html

相关文章

  • Java 剑指offer(16) 打印1到最大的n位数
    题目输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。思路陷阱:n过大时是大数问题,不能简单用int或者long数据输出,需要采......
  • 肯天chem-trend 橡胶行业案例研究 | 助力全球最大的制鞋商
    小肯教授——案例研究作为一家已经非常成功和成熟的制造商,该客户希望可以更高效地利用自身的每一个优势。肯天与客户一起为其全新的旋转注塑工艺测试并选择理想的解决方案。......
  • 最大公约数
    ​1.什么是公约数?公约数,亦称“公因数”。它是一个能同时整除几个整数的数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”。2.最大公约数公约数中最......
  • 算法题——最大异或和
    题目代码#include<iostream>#include<stdio.h>#include<cstring>#include<algorithm>usingnamespacestd;constintN=3100000+10;intn,m;inttrie[N][2],cn......
  • 华为OD机试 最大相连男生数
    ......
  • linux之文件最大打开数量
    谈打开文件数,不得不谈文件句柄1.什么是文件句柄?在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数......
  • P1115 最大子段和
    P1115最大子段和最大子段和题目描述给出一个长度为n的序列a,选出其中连续且非空的一段使得这段和最大。输入格式第一行是一个整数,表示序列的长度n。第二行有n......
  • 最大正方形(二维dp)
    最大正方形在一个由'0'和'1'组成的二维矩阵内,找到只包含'1'的最大正方形,并返回其面积。示例1:输入:matrix=[["1","0","1","0","0"],["1","0","1","1","1"],[&quo......
  • PyCharm每行最大长度设置
    点击上方菜单栏中的file选项,然后在下拉的菜单中点击settings选项在这个窗口中,可以看到左侧有很多的选项,方便对解释器、pycharm个性化、环境配置等设置的,因为我们要设置的......
  • 从一个坐标点移动到另一个坐标点,每次移动x,y最大举例不能超过127 , 算法
    我的思路是这样的,先移正方形距离,再移横向或者纵向距离,最终移动边边角角的距离代码如下typeKVMMouseControlstruct{ KeyStateuint8`json:"keyState"`//按键状态......