poj 2342 【Anniversary party】树形dp
题目传送门//res tp poj
题意
给出一棵有权树,求一个节点集的权值和,满足集合内的任意两点不存在边
分析
每个点有选中与不选中两种状态,对于第\(i\)个点,记选中为\(sel_i\),不选中为\(insel_i\)
若某一节点选中,则其子节点都不能选中。
若某一节点不选中,则其子节点有两种选择:1.选中 2.不选中
故
\]
\]
其中\(j\) 是\(i\)的子节点,\(val_i\)是节点\(i\)的权值
设\(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]));
}
poj 2342 【Anniversary party】树形dp的更多相关文章
- POJ 2342 - Anniversary party - [树形DP]
		题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ... 
- poj 2342 Anniversary party  树形DP入门
		题目链接:http://poj.org/problem?id=2342 题意:一家公司有1 <= N <= 6 000个职工,现要组织一些职工参加晚会,要求每个职工和其顶头上司不能同时参加 ... 
- POJ 2342 Anniversary party 树形DP基础题
		题目链接:http://poj.org/problem?id=2342 题目大意:在一个公司中,每个职员有一个快乐值ai,现在要开一个party,邀请了一个员工就不可能邀请其直属上司,同理邀请了一个人 ... 
- poj 2324 Anniversary party(树形DP)
		/*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ... 
- POJ 2342 Anniversary party (树dp)
		题目链接:http://poj.org/problem?id=2342 有n个人,每个人有活跃值.下面n-1行u和v表示u的上司是v,有直接上司和下属的关系不能同时参加party,问你party最大的 ... 
- poj 2342 && hdu 1520 树形dp
		题意:有n个人,接下来n行是n个人的价值,再接下来n行给出l,k说的是l的上司是k,这里注意l与k是不能同时出现的 链接:点我 dp[i][1] += dp[j][0], dp[i][0] += ma ... 
- DP Intro - poj 2342 Anniversary party
		今天开始做老师给的专辑,打开DP专辑 A题 Rebuilding Roads 直接不会了,发现是树形DP,百度了下了该题,看了老半天看不懂,想死的冲动都有了~~~~ 最后百度了下,树形DP入门,找到了 ... 
- POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划)
		POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划) Descri ... 
- POJ 2342  &&HDU 1520  Anniversary party  树形DP 水题
		一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ... 
- poj 2342 Anniversary party 简单树形dp
		Anniversary party Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3862 Accepted: 2171 ... 
随机推荐
- mac安装需要的骚操作
			显示隐藏文件 defaults write com.apple.finder AppleShowAllFiles -bool true; KillAll Finder 允许任何来源 sudo spct ... 
- 协议基础:SMTP:使用Telnet学习SMTP协议
			协议基础:SMTP:使用Telnet学习SMTP协议 2018-07-30 20:05:50 liumiaocn 阅读数 7479更多 分类专栏: 工具 Unix/Linux 版权声明:本文为博主 ... 
- gitlab 配置.ssh实现免密登陆
			首次配置gitlab的.ssh时 安装gitbash 通过gitbash 配置.ssh 打开gitbash,输入如下命令生成ssh,邮箱换成自己的 ssh-keygen -t rsa -C " ... 
- easyui-combobox和C标签判断回显
			<td width="40%"> <select class="easyui-combobox" id="work_property ... 
- 异步机制 - Overlapped
			1 前面说到 GetOverlappedResult的bWait含义 GetOverlappedResult的bWait含义表示是否需要等待,如果IO还处于PENDING状态,内部大概实现是这样 hO ... 
- 移动端——页面点击( touchend -> click)
			手机端页面好多要注意的,点击事件就是其中一个: 在手机端页面中使用 click,安卓手机能正常实现点击效果,可是苹果手机不能点击:用 touchend 代替 click,苹果手机中能点击,但是可能出现 ... 
- SQL-W3School-高级:SQL ALIAS(别名)
			ylbtech-SQL-W3School-高级:SQL ALIAS(别名) 1.返回顶部 1. 通过使用 SQL,可以为列名称和表名称指定别名(Alias). SQL Alias 表的 SQL Ali ... 
- Sublime Text 编译运行Kotlin
			Sublime Text 编译运行Kotlin 转 https://blog.csdn.net/pirate7777777/article/details/72655293 kotlin最近是火了,所 ... 
- Objective-C中的self与LLVM Clang新引入的instancetype
			我们知道,大部分面向对象语言对于一个类的成员方法都有一个隐含的参数.在C++.Java.C#和JavaScript中是this,而在Objective-C中则是self.当然,由于Objective- ... 
- c++ new  bad_alloc
			try { for (int i = 0; i<1000; i++) { test1 = new Test(); cout << i << " new dog ... 
