CODEVS【1380】没有上司的舞会
2024-09-29 13:12:55
题目描述 Description
Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数最大。但是,没有职员愿和直接上司一起与会。
输入描述 Input Description
第一行一个整数N。(1<=N<=6000)
接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)
接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。
最后一行输入0,0。
输出描述
Output Description
输出最大的快乐指数。
样例输入
Sample Input
7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0
样例输出
Sample Output
5
树形DP,复习了一下vector的用法。。
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<algorithm>
#define maxn 6000+50
#define inf 0x7fffffff
#define xiao 1e-9
using namespace std;
int a[maxn],b[maxn],f[maxn][];
vector<int> vec[];
inline void dfs(int k)
{
for(int i=;i<vec[k].size();++i)
{
int h=vec[k][i];
dfs(h);
f[k][]+=max(f[h][],f[h][]);
f[k][]+=f[h][];
}
f[k][]+=a[k];
}
int main()
{
int n,x,y;
memset(b,,sizeof(b));
scanf("%d",&n);
for(int i=;i<=n;++i) scanf("%d",&a[i]);
for(int i=;i<n;++i)
{
scanf("%d%d",&x,&y);
if(x==&&y==) break;
vec[y].push_back(x);
b[x]=y;
}
for(int i=;i<=n;++i)
if(b[i]==) { dfs(i);cout<<max(f[i][],f[i][]);break;}
return ;
}
最新文章
- css的命名规则
- centos6.5新增加硬盘挂载并实现开机时自动挂载
- Yii2.0高级框架数据库增删改查的一些操作(转)
- com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。
- php 获取时间今天明天昨天时间戳
- javascript中用来定义引用类型的一种";默认";模式
- C语言字符数组回顾
- 【原】git常见用法
- (转)轻松学,Java 中的代理模式及动态代理
- 密码正确 mysql无法登陆 red7.3 上安装mysql5.6后登录报错ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; (using passswd :yes)
- MyBatis #{} 和 ${} 引用值的用法
- 开闭原则(Open Closed Principle,OCP)
- style css
- c#基础学习(0706)之使用虚方法实现多态
- [翻译] ZFDragableModalTransition
- 评微软收购GitHub
- ES6学习之-let 和const命令
- 十年Java架构师分享
- 手脱ASProtect v1.23 RC1(有Stolen Code)之以壳解壳
- 安装pip源