蓝桥杯生命之树(DP)

复制代码
 输入:5
     1 -2 -3 4 5
     4 2
     3 1
     1 2
     2 5
输出:8

思路:

无向无环图的存储,且节点编号从1 开始(遍历注意一下)。本题是求这颗树中相互连接的节点的和最大问题,也就是连通块和最大问题,用dfs遍历图,dpx表示以节点x为跟的部分的和,如果dpv\[xi]小于0,那么不会增大dpx的值,所以舍去,如果dp\[xi]>0,则dpx+=dp\[xi],最后在比较各部分的dp,找到最大值即为所求。

注意:0ll是表示长整型的0,max比较一般要同类型

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+5;
int n,a[N],dp[N];
vector<int> v[N];
void dfs(int x,int fa) 
{
	dp[x]=a[x];
	for(int i=0;i<v[x].size();i++)
	{
		if(v[x][i]==fa) continue;
		dfs(v[x][i],x);
		dp[x]+=max(0ll,dp[v[x][i]]);//不能确定dp什么时候<0,因此要递归遍历
	}
}
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	for(int i=0;i<n-1;i++)
	{
		int a,b;
		cin>>a>>b;
		v[a].push_back(b);
		v[b].push_back(a);
	}
	dfs(1,-1);
	int ans=-0x3f3f3f3f;
	for(int i=1;i<=n;i++)
	{
		ans=max(ans,dp[i]);
	}
	cout<<ans<<endl;
 } 
相关推荐
考研保研资料分享10 小时前
985工科跨保上财应用统计:数学笔试、匿名面试与机试复盘
面试·职场和发展
杨逢昌工厂6S管理19 小时前
126-杨逢昌6S三环体系:越做越乱的现场熵增机理与基准化治理——一线现场诊断笔记
经验分享·笔记·职场和发展·学习方法
海绵宝宝的月光宝盒21 小时前
7-AutoCAD-参考线、多行文字、填充命令应用
经验分享·笔记·学习·职场和发展·课程设计·制造·cad
GG.WinGel21 小时前
三元组中心问题
java·数据结构·算法·青少年编程·蓝桥杯
救救孩子把2 天前
AI面试八股文-23_23-Agent可观测性与生产监控面试题
人工智能·面试·职场和发展·agent·langsmith·langfuase
考研保研资料分享2 天前
2023历史学跨保山大马理论:两轮笔面试、课程论文与方向取舍
面试·职场和发展
yuanxi2002 天前
大众汽车集团或暂停印度电动汽车投资:PSS⁵谈判力视角
职场和发展·创业创新·学习方法
天真小巫2 天前
2026.10.25总结
职场和发展
_张一凡2 天前
【AIGC面试面经第15期】AI 视频核心基础知识相关问答
面试·职场和发展·aigc