一颗树,选取不相邻的点,求最大点权值

因为当前结点选或不选后后效性,所以我们加一唯来取消后效性

表示以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;
}

最新文章

  1. 关于MJRefresh的下拉加载数据bug
  2. [转]各种移动GPU压缩纹理的使用方法
  3. iOS 杂笔-25(不要用copy修饰NSMutableString)
  4. 基于Css反射形自触发事件,优化你的延时事件
  5. JS 之BOM
  6. mysql5.7.9 源码安装 (转)
  7. 如何添加真机调试的iOS设备
  8. vector&lt;int&gt; v2 = 42; 为何非法
  9. Web Api 自动生成帮助文档
  10. 在不用Promise的情况下如何控制异步请求?
  11. BZOJ 3000: Big Number (数学)
  12. Java使用volatile实现多线程输出ABC共10次
  13. vue-loader的理解
  14. 雷林鹏分享:Laravel 安装
  15. 自学华为IoT物联网_04 车联网常见问题及解决方案
  16. tp未验证内容-9
  17. 【洛谷P1828】香甜的黄油
  18. WIP 005 - Implement the search result page
  19. Nginx(六)-- 配置文件之Gzip
  20. CONE NAT 和 Symmetric NAT

热门文章

  1. .NET框架详解
  2. Storm Spout
  3. 利用canvas做一个简单个gif停止和播放
  4. Eclipse使用struts2开发web应用快速搭建
  5. swift语言点评三 - Basic Operators
  6. gcd的queue与group
  7. GCD - Extreme (II) UVA - 11426 欧拉函数_数学推导
  8. BZOJ 1085 / LOJ 2151 [SCOI2005]骑士精神 (剪枝/A*迭代搜索)
  9. 紫书 习题 11-12 UVa 1665 (并查集维护联通分量)
  10. [ZJOI2008]骑士(基环树,树形dp)