动态规划--树形DP

https://www.acwing.com/problem/content/287/

所谓树形DP,也就是关系的两边变成了树的上层和下层。

 

 

复制代码
 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 const int N=6010;
 5 int happy[N];
 6 int h[N],e[N],ne[N],idx;
 7 int d[N];
 8 int f[N][2];
 9 void add(int a,int b){
10     e[idx]=b,ne[idx]=h[a],h[a]=idx++;
11 }
12 void dfs(int u){
13     for(int i=h[u];i!=-1;i=ne[i]){
14         int j=e[i];
15         dfs(j);
16         f[u][0]+=max(f[j][0],f[j][1]);
17         f[u][1]+=f[j][0];
18     }
19     f[u][1]+=happy[u];
20 }
21 int main(void){
22     int n;
23     cin>>n;
24     for(int i=1;i<=n;i++) cin>>happy[i];
25     memset(h,-1,sizeof(h));
26     for(int i=0;i<n-1;i++){
27         int a,b;
28         cin>>a>>b;
29         add(b,a);
30         d[a]++;
31     }
32     int root=0;
33     for(int i=1;i<=n;i++)//找到根节点
34         if(d[i]==0)
35             root=i;
36     dfs(root);
37     cout<<max(f[root][0],f[root][1]);
38     return 0;
39 }
复制代码

 

posted on   greenofyu  阅读(32)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示