洛谷 P1352 没有上司的舞会 (树上不相邻点权和最大)
2024-08-25 00:50:57
一颗树,选取不相邻的点,求最大点权值
因为当前结点选或不选后后效性,所以我们加一唯来取消后效性
表示以i为根的树且i不选的最大价值
表示以i为根的树且i选的最大价值
显然有
#include<cstdio>
#include<vector>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;
const int MAXN = 6123;
int f[2][MAXN], a[MAXN], b[MAXN], n;
vector<int> g[MAXN];
void dfs(int u)
{
f[0][u] = 0;
f[1][u] = a[u];
if(!g[u].size()) return;
REP(i, 0, g[u].size())
{
int v = g[u][i];
dfs(v);
f[1][u] += f[0][v];
f[0][u] += max(f[0][v], f[1][v]);
}
}
int main()
{
scanf("%d", &n);
REP(i, 1, n + 1) scanf("%d", &a[i]);
int fa, son;
while(~scanf("%d%d", &son, &fa) && fa)
{
g[fa].push_back(son);
b[son] = 1;
}
REP(i, 1, n + 1)
if(!b[i])
{
dfs(i);
printf("%d\n", max(f[0][i], f[1][i]));
break;
}
return 0;
}
最新文章
- 关于MJRefresh的下拉加载数据bug
- [转]各种移动GPU压缩纹理的使用方法
- iOS 杂笔-25(不要用copy修饰NSMutableString)
- 基于Css反射形自触发事件,优化你的延时事件
- JS 之BOM
- mysql5.7.9 源码安装 (转)
- 如何添加真机调试的iOS设备
- vector<;int>; v2 = 42; 为何非法
- Web Api 自动生成帮助文档
- 在不用Promise的情况下如何控制异步请求?
- BZOJ 3000: Big Number (数学)
- Java使用volatile实现多线程输出ABC共10次
- vue-loader的理解
- 雷林鹏分享:Laravel 安装
- 自学华为IoT物联网_04 车联网常见问题及解决方案
- tp未验证内容-9
- 【洛谷P1828】香甜的黄油
- WIP 005 - Implement the search result page
- Nginx(六)-- 配置文件之Gzip
- CONE NAT 和 Symmetric NAT
热门文章
- .NET框架详解
- Storm Spout
- 利用canvas做一个简单个gif停止和播放
- Eclipse使用struts2开发web应用快速搭建
- swift语言点评三 - Basic Operators
- gcd的queue与group
- GCD - Extreme (II) UVA - 11426 欧拉函数_数学推导
- BZOJ 1085 / LOJ 2151 [SCOI2005]骑士精神 (剪枝/A*迭代搜索)
- 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)
- [ZJOI2008]骑士(基环树,树形dp)