蓝桥杯 算法训练 结点选择

题解参考:https://blog.csdn.net/u013852115/article/details/79437734

https://www.cnblogs.com/A-Little-Nut/p/10394084.html

语法参考:https://www.cnblogs.com/zhuruibi/p/8983192.html

https://www.cnblogs.com/home123/p/7450758.html

复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+5;
 4 int dp[2][N]={0};
 5 vector<vector<int> > ve;
 6 void dfs(int now,int pre)//因为只有一个来处,所以用一个值来标识即可,不需用到vis数组
 7 {
 8     for (int i=0;i<ve[now].size();i++)
 9     {
10         int to=ve[now][i];
11         if (to==pre) continue;
12         dfs(to,now);
13         dp[0][now]+=max(dp[0][to],dp[1][to]);//注意是+=!
14         dp[1][now]+=dp[0][to];
15     }
16 }
17 int main()
18 {
19 //    freopen("in.txt","r",stdin);
20     int n;
21     cin>>n;
22     ve.resize(n+1);//此句不能少!!
23     for (int i=1;i<=n;i++)//注意审题,这里需从0开始!!
24     {
25         int tmp;
26         cin>>tmp;
27         dp[1][i]=tmp;//tmp是第i个节点的权值不是第tmp个节点的权值!!
28     }
29     for (int i=0;i<n-1;i++)
30     {
31         int a,b;
32         cin>>a>>b;
33         ve[a].push_back(b);
34         ve[b].push_back(a);
35     }
36     dfs(1,0);
37     cout<<max(dp[0][1],dp[1][1])<<endl;
38 
39     return 0;
40 }
复制代码

 

posted @   hemeiwolong  阅读(209)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示