博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1520 Anniversary party(基本的树形DP)
阅读量:4036 次
发布时间:2019-05-24

本文共 783 字,大约阅读时间需要 2 分钟。

 

1、

2、题目大意:

有N个人,给出每个人的权值,然后给出他们之间的关系,l k,代表l是员工,k是l的直接上司,现在要求是不让有直接关系的人一块出现在晚会上,求出满足这个要求的人的最大权值是多少。

定义dp[i][0]表示i不选,dp[i][1]表示i选

dp[i][]表示以i为根节点的子树的最大权值和

dp[i][0]=max(dp[j][0],dp[j][1]);//i选时,她的子节点可选可不选,dp[i][0]+=max(dp[j][0],dp[j][1])

dp[i][1]+=dp[j][0];,i结点选,那么他的子节点都不能选

对于这道题来说,首先得建一棵树,可以将给定的关系,存到邻接链表中,使用vector,

#include<vector>

vector<int> adj[N];

如要将v放到以u开头的链中,adj[u].push_back(v);

注意每次使用后,都清空,

for(int i=1;i<=n;i++)

adj[i].clear();

建好树之后,用dfs(),将子节点的值更新到父节点中,最终根节点中的值就是所求,max(dp[u][0],dp[u][1]);

3、AC代码:

#include
#include
using namespace std;#include
#include
#define N 6005int num[N];vector
adj[N];int indg[N];int dp[N][2];int visit[N];void dfs(int v){ dp[v][0]=0; dp[v][1]=num[v]; visit[v]=1; for(int i=0;i

 

转载地址:http://yrddi.baihongyu.com/

你可能感兴趣的文章
Intellij IDEA启动优化,让开发的感觉飞起来
查看>>
使用 Springboot 对 Kettle 进行调度开发
查看>>
如何优雅的编程,lombok你怎么这么好用
查看>>
一文看清HBase的使用场景
查看>>
除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单
查看>>
解析zookeeper的工作流程
查看>>
搞定Java面试中的数据结构问题
查看>>
慢慢欣赏linux make uImage流程
查看>>
linux内核学习(7)脱胎换骨解压缩的内核
查看>>
以太网基础知识
查看>>
慢慢欣赏linux 内核模块引用
查看>>
kprobe学习
查看>>
慢慢欣赏linux phy驱动初始化2
查看>>
慢慢欣赏linux CPU占用率学习
查看>>
2020年终总结
查看>>
linux内核学习(4)建立正式内核的页式内存映射, 以x86 32位模式为例
查看>>
Homebrew指令集
查看>>
React Native(一):搭建开发环境、出Hello World
查看>>
React Native(二):属性、状态
查看>>
JSX使用总结
查看>>