题目传送门//res tp poj

题意

给出一棵有权树,求一个节点集的权值和,满足集合内的任意两点不存在边

分析

每个点有选中与不选中两种状态,对于第\(i\)个点,记选中为\(sel_i\),不选中为\(insel_i\)

若某一节点选中,则其子节点都不能选中。

若某一节点不选中,则其子节点有两种选择:1.选中 2.不选中

\[sel_i = val_i +\sum_j insel_j
\]

\[insel_i = \sum_j max\{insel_j,sel_j\}
\]

其中\(j\) 是\(i\)的子节点,\(val_i\)是节点\(i\)的权值

设\(rt\)为该树的根

则答案为

\[ans = max\{sel_{rt},insel_{rt}\}
\]

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<deque>
#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i = (a);i>=(b);--i)
#define fo(i,a,b) for(int i =(a);i<(b);++i)
#define de(x) cout<<#x<<" = "<<x<<endl;
#define endl '\n'
#define ls(p) ((p)<<1)
#define rs(p) (((p)<<1)|1)
using namespace std;
typedef long long ll;
const int mn = 6e3 + 10;
int n;
int u[mn],inu[mn];
int val[mn]; struct E{
int firs,lasts;
int fa;
int nextbro;
}e[mn]; void dfs(int r){
int tpos = e[r].firs;
while(tpos){
dfs(tpos);
tpos = e[tpos].nextbro;
}
tpos = e[r].firs;
u[r] += val[r];
while(tpos){
u[r] += inu[tpos];
inu[r] += max(inu[tpos],u[tpos]);
tpos = e[tpos].nextbro;
}
} int main(){
scanf("%d",&n);
rep(i,1,n)scanf("%d",&val[i]);
int tf,ts;
rep(i,1,n){
scanf("%d %d",&ts,&tf);
if(e[tf].firs){
e[e[tf].lasts].nextbro = ts;
e[tf].lasts = ts;
}
else{
e[tf].firs = e[tf].lasts = ts;
}
e[ts].fa = tf;
}
int root = 1;
while(e[root].fa) root = e[root].fa;
//de(root)
dfs(root);
printf("%d\n",max(u[root], inu[root]));
}

最新文章

  1. debug [LTS]
  2. 图片延迟加载(用jq自己写的方法)
  3. AOV网络拓扑排序
  4. CSS3实现jquery的特效
  5. E212: 不能以写入模式打开 linux
  6. Android日志收集功能设计和实施报告(总)
  7. 已知从BUF开始存放了10个字类型有符号数据,编程求出这10个数中的最大数和最小数(将最大数存入MAX字单元、最小数存入MIN字单元),并将其以10进制数的形式在屏幕上显示出来。
  8. 201621123050 《Java程序设计》第5周学习总结
  9. Gin框架源码解析
  10. Excel Foundation Install
  11. react-native热更新之CodePush详细介绍及使用方法
  12. 使用js实现思维导图
  13. [代码]--C#action和func的使用
  14. node(2) EventEmitter类 事件队列 事件和error事件方法
  15. laravel 事务处理
  16. Spring Boot 的 Security 安全控制
  17. HashMap相关总结
  18. CentOS6.8_64位手动安装MySQL5.6
  19. Android权限管理PermissionsDispatcher2.3.2使用+原生6.0权限使用
  20. HDU 6187 Destroy Walls

热门文章

  1. 使用appium+python做UI自动化的demo
  2. 十七、程序包管理之yum和编译安装
  3. Mybatis 批量操作-删除、修改和查询
  4. pip 安装指定版本的工具
  5. Linux设备驱动程序 之 vmalloc
  6. idea内存不足或过大闪退
  7. ubuntu mysql 的安装、配置、简单使用,navicat 连接
  8. Job for keepalived.service failed because the control process exited with error code. See &quot;systemctl status keepalived.service&quot; and &quot;journalctl -xe&quot; for details.
  9. Docker 官方安装详解
  10. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_13.RabbitMQ研究-工作模式-header和rpc工作模式