本来以为是一道很简单的提,可以分分钟解决(实际上就是很简单)

然而一直报错,找半天,竟然要多组输入(还是太菜了)

所以每组需要先初始化,

这是一道树形DP的简单题,具体思路就是我选这个上司就不能选他的直属下级,如果不选这个上司,那么选不选他的直属下级要看rate怎么样

接下来放代码:

#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=6001;
int dp[N][2],father[N];//rate[N];
vector<int>tree[N];
int n;
void dfs(int fa){
dp[fa][0]=0;
//dp[fa][1]=rate[fa];
for(int i=0;i<tree[fa].size();i++){
int child=tree[fa][i];
dfs(child);
dp[fa][0]+=max(dp[child][0],dp[child][1]);
dp[fa][1]+=dp[child][0];
}
}
int main()
{
//while(~scnaf("%d",&n)){
while(cin>>n){
for(int i=1;i<=n;i++){
scanf("%d",&dp[i][1]);
tree[i].clear();
father[i]=0;
}
int x,y;
scanf("%d%d",&x,&y);
while(x&&y){
tree[y].push_back(x);
father[x]=y;
scanf("%d%d",&x,&y);
}
int t=1;
while(father[t])t=father[t];
/*
int ans=0;
for(int i=1;i<=n;i++){
if(!father[i]){
dfs(i);
ans+=max(dp[i][0],dp[i][1]);
}
}
cout << ans << endl;
*/
dfs(t);
cout << max(dp[t][0],dp[t][1]) << endl;
}
return 0;
}

最新文章

  1. Linux最常用命令的小总结
  2. windows phone listbox的点击事件
  3. maven打包忽略测试用例
  4. 中国IT人,你们是否从没想过开发一款伟大的产品?
  5. 用BenchmarkDotNet给C#程序做性能测试
  6. vijosP1210 盒子与球
  7. C++学习笔录4
  8. 电脑中安装多个jdk,eclipse的选择!
  9. VS 2017 + opencv4.0
  10. 做接口自动化时候,一些登录头信息可以通过aop的方式进行增强
  11. 洛谷P4451 [国家集训队]整数的lqp拆分 [生成函数]
  12. parted 分区命令
  13. docker镜像制作 centos6 nginx1.15.6 with NGINX_UPSYNC_MODULE
  14. SQL中not in 和not exists
  15. EditText的焦点问题
  16. IE6.0 PNG背景透明图片插件
  17. zabbix 实现对服务器的负载监控
  18. 软件包管理:rpm命令管理-安装升级与卸载
  19. ThinkPHP 5.x远程命令执行漏洞分析与复现
  20. Java 分割、合并byte数组

热门文章

  1. Java 【循环语句】
  2. Sass环境安装-Sass sublime 编辑器插件编译方法
  3. Petya and Array CodeForces - 1042D
  4. MySQL的数据库备份
  5. 解决ios手机中input输入框光标过长的问题
  6. 安装oracle11gR2
  7. 使用Xpath爬取酷狗TOP500的歌曲信息
  8. RHEL/CentOS 7中Nginx的systemd service
  9. eclipse如何查看源码
  10. [USACO12DEC]First!