博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AcWing 285. 没有上司的舞会(树形dp入门)
阅读量:5010 次
发布时间:2019-06-12

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

Ural大学有N名职员,编号为1~N。

他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。

每个职员有一个快乐指数,用整数 HiHi 给出,其中 1iN1≤i≤N。

现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。

在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。

输入格式

第一行一个整数N。

接下来N行,第 i 行表示 i 号职员的快乐指数HiHi。

接下来N-1行,每行输入一对整数L, K,表示K是L的直接上司。

最后一行输入0,0。

输出格式

输出最大的快乐指数。

数据范围

1N60001≤N≤6000,

128Hi127−128≤Hi≤127

输入样例:

711111111 32 36 47 44 53 50 0

输出样例:

5 代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
const int maxn=6e3+5;typedef long long ll;using namespace std;int H[maxn];vector
vec[maxn];int vis[maxn],vis1[maxn];int dp[maxn][2];void dfs(int x){ dp[x][0]=0; dp[x][1]=H[x]; for(int t=0;t
>n; memset(vis,0,sizeof(vis)); memset(vis1,0,sizeof(vis1)); memset(dp,0,sizeof(dp)); for(int t=1;t<=n;t++)scanf("%d",&H[t]); int L,K; for(int t=1;t<=n-1;t++){ scanf("%d%d",&L,&K); vis[L]=1; // vis1[K]=1; vec[K].push_back(L); } int x,y; scanf("%d%d",&x,&y); int ans; for(int t=1;t<=n;t++) { if(vis[t]==0) { dfs(t); ans=max(dp[t][0],dp[t][1]); } } printf("%d\n",ans); system("pause"); return 0;}

 

转载于:https://www.cnblogs.com/Staceyacm/p/11338488.html

你可能感兴趣的文章
guid
查看>>
Python中出现“TabError: inconsistent use of tabs and spaces in indentation”问题的解决
查看>>
ajax请求
查看>>
js学习总结----DOM增删改和应用
查看>>
希尔伯特矩阵(Hilbert matrix)
查看>>
(20)sopel算法
查看>>
学习总结 javascript 闭包
查看>>
实验吧一个小坑注入
查看>>
【 D3.js 高级系列 — 8.0 】 打标
查看>>
Mac必备软件推荐
查看>>
Android Gson深入分析
查看>>
display:flow-root
查看>>
判读字符串是否为空的全局宏-分享
查看>>
iOS中Block的基础用法
查看>>
mac 终端 使用ftp命令
查看>>
22-reverseString-Leetcode
查看>>
Centos 开机自动联网
查看>>
cocos2dx使用lua和protobuf
查看>>
HDOJ 5630 Rikka with Chess
查看>>
netcore2.1 在后台运行一个任务
查看>>