[wikioi]没有上司的舞会
树形DP。用F[k][0]和F[k][1]表示某节点不选和选了之后子树的最大值。那么:
f[i][0]=sigma(max(f[k][0],f[k][1]))
f[i][1]=sigma(f[k][0])+v[i]
解题中用了备忘录。一开始要先找树根。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <memory.h>
#include <vector>
#define MAX(a, b) a>b?a:b
#define LEN 6005
using namespace std; int F[LEN][2]; // dp state, F[i][0] for i not selected, F[i][1] for i selected
int R[LEN];
bool isRoot[LEN];
int opt(int x, int y, vector<vector<int> > &tree) {
if (F[x][y] != -1) {
return F[x][y];
}
if (y == 0) {
int sum = 0;
for (int i = 0; i < tree[x].size(); i++) {
sum += MAX(opt(tree[x][i], 0, tree), opt(tree[x][i], 1, tree));
}
F[x][y] = sum;
return sum;
}
else if (y == 1) {
int sum = R[x];
for (int i = 0; i < tree[x].size(); i++) {
sum += opt(tree[x][i], 0, tree);
}
F[x][y] = sum;
return sum;
}
else return 0;
} int main()
{
memset(F, 0, sizeof(F));
memset(R, 0, sizeof(R));
memset(isRoot, true, sizeof(isRoot));
int n;
cin >> n;
vector<vector<int> > tree(n+1);
for (int i = 1; i <= n; i++) {
cin >> R[i];
}
int x, y;
for (int i = 1; i <= n-1; i++) {
cin >> x >> y;
tree[y].push_back(x);
isRoot[x] = false;
}
cin >> x >> y; // skip 0, 0 for (int i = 1; i <= n; i++) {
for (int j = 0; j <= 1; j++) {
F[i][j] = -1;
}
}
int root = 0;
for (int i = 1; i <= n; i++) {
if (isRoot[i]) {
root = i;
break;
}
}
int ans = MAX(opt(root, 0, tree), opt(root, 1, tree));
cout << ans << endl;
return 0;
}
[wikioi]没有上司的舞会的更多相关文章
- wikioi 1380 没有上司的舞会 树形dp
1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- [codevs1380]没有上司的舞会([BZOJ2060][Usaco2010 Nov]Visiting Cows 拜访奶牛)
[codevs1380]没有上司的舞会 试题描述 Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现 ...
- 【洛谷P1352】没有上司的舞会
[洛谷P1352]没有上司的舞会 x舷售 锚」翅θ 但是 拙臃 蓄ⅶ榔 暄条熨卫 翘ヴ馇 表现无愧于雪月工作室的核心管理 爸惚扎掬 颇瓶 芟缆肝 貌痉了 洵┭笫装 嗝◇裴腋 褓劂埭 ...
- Codevs1380没有上司的舞会_KEY
没有上司的舞会 1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系 ...
- 『没有上司的舞会 树形DP』
树形DP入门 有些时候,我们需要在树形结构上进行动态规划来求解最优解. 例如,给定一颗\(N\)个节点的树(通常是无根树,即有\(N-1\)条无向边),我们可以选择任意节点作为根节点从而定义出每一颗子 ...
- 没有上司的舞会|codevs1380|luoguP1352|树形DP|Elena
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系 ...
- 洛谷 p1352 没有上司的舞会 题解
P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员 ...
- [LuoguP1352][FJSC]没有上司的舞会
[LuoguP1352][FJSC]没有上司的舞会(Link) 现在你有一棵树,每一个点有一个点权\(R[i]\),如果选择了\(i\)点,那么\(i\)子树上的所有的点都不能选,现在要求选择若干个点 ...
随机推荐
- Modelsim的自动化脚本仿真平台
自动化仿真平台由tcl语言搭建,大规模设计使用此平台让仿真便捷不少.大体上用tcl语言进行modelsim仿真的流程如下: 1. 建立库 2. 映射库到物理目录 3. 编译源代码 4. 启动仿真器 5 ...
- Maven笔记(一)
1. 坐标 Maven坐标为各种构件引入了秩序,任何一个构件都有必须明确定义自己的坐标,而一组Maven坐标是通过一些元素定义的,它们是groupId, artifactId, version, pa ...
- MySQL的链接,查看数据库,使用数据库,查看表
MySQL的链接,查看数据库,使用数据库,查看表 mysql> show databases; +--------------------+ | Database | +------------ ...
- UML 结构图之包图 总结
[注] 本文不是包图的基础教程, 只是包图的图形总结. 学习UML图形 推荐阅读<UML参考手册>第2版. http://www.umlchina.com/ 推荐微软的开发软件设计模型 h ...
- CWnd::UpdateData
CWnd::UpdateData 格式: BOOL UpdateData( BOOL bSaveAndValidate = TRUE ); 描述:调用该成员函数初始化在对话框中的数据,或检索和验证对话 ...
- ios fixed属性bug解决方法
在内容层外面包一个div 加上样式:position:fixed;top:0px; bottom:50px;overflow:scroll; 就可以完美解决
- oc for in 的时候nsscanner: nil string argument
今天偶然发现,oc for in 动态的给一数组加东西,然后嵌套for in 会报nsscanner: nil string argument. 换成for循环就好了,暂时还没找到原因
- UITableView优化的那些事儿
作为iOS开发,UITableView可能是平时我们打交道最多的UI控件之一,其重要性不言而喻. 关于TableView,我想最核心的就是UITableViewCell的重用机制了. 简单来说呢就是当 ...
- c语言中结构体的定义、初始化及内存分配
#include <stdio.h> struct person { char *name; int age; }; int main() { //结构体可以定义在函数内,也可以定义到函数 ...
- css样式 第6节
程序员语录: 不要太刻意地把写程序这件事和挣钱挂起来,局限了你挣钱的本事 <html> <head> <title>网页样式</title> </ ...