前言

树形dp是前天学的,题目也是前天做的,可博客却是今天发的。


正题

题目大意

一棵树一样的火车站,每个站点有不同的利润,不能连续选择相连的两个站点的利润,求最大利润。


输入输出(建议无视)

Input

第一行输入整数N(<=100000),表示有N个火车站,分别用1,2。。。,N来编号。接下来N行,每行一个整数表示每个站点的利润,接下来N-1行描述火车站网络,每行两个整数,表示相连接的两个站点。

Output

输出一个整数表示可以获得的最大利润。

Sample Input

6
10
20
25
40
30
30
4 5
1 3
3 4
2 3
6 4

Sample Output

90


解题思路

树形dp,f[i]表示选择i站点包括它子节点的最大利润,g[i]表示不包括它子节点的最大利润。
动态转移方程
f[i]+=f[yi]+a[i]
g[i]+=max(g[yi],f[yi])
yi表示它的所有子节点


代码

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
struct tree{int x,y,next;
}a[200001];
bool ok[100001];
int n,money[100001],w,ls[100001],f[100001],g[100001],dx,dy;
bool dp(int x)
{if (ok[x]) return false;ok[x]=true;//标记int q=ls[x];while (q!=0){if (dp(a[q].y)){f[x]+=g[a[q].y];g[x]+=max(f[a[q].y],g[a[q].y]);//动态转移}q=a[q].next;//下一条边}f[x]+=money[x];//价值return true;
}
int main()
{scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d",&money[i]);for (int i=1;i<n;i++){scanf("%d%d",&dx,&dy);a[++w].x=dx;a[w].y=dy;a[w].next=ls[dx];ls[dx]=w;//邻接表a[++w].x=dy;a[w].y=dx;a[w].next=ls[dy];ls[dy]=w;}memset(ok,false,sizeof(ok));//有些莫名其妙的bug所以...dp(1);//随便哪个点开始都行,反正是个无向图printf("%d",max(f[1],g[1]));//输出
}

jozj3419-最大利润【树形dp】相关推荐

  1. bzoj4472: [Jsoi2015]salesman(树形dp)

    Description 某售货员小T要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇 之间都只有唯一的可能经过其它城镇的路线. 小T 可以准确地估计出在每个城镇停留的净收 益.这些净收 ...

  2. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  3. [树形dp] Jzoj P5233 概率博弈

    Description 小A和小B在玩游戏.这个游戏是这样的: 有一棵n个点的以1为根的有根树,叶子有权值.假设有m个叶子,那么树上每个叶子的权值序列就是一个1->m 的排列. 一开始在1号点有 ...

  4. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  5. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  6. POJ 3342 树形DP+Hash

    这是很久很久以前做的一道题,可惜当时WA了一页以后放弃了. 今天我又重新捡了起来.(哈哈1A了) 题意: 没有上司的舞会+判重 思路: hash一下+树形DP 题目中给的人名hash到数字,再进行运算 ...

  7. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  8. 容斥 + 树形dp ---- 2021 icpc 沈阳 L Perfect Matchings

    题目链接 题目大意: 就是给你一个2n2n2n个点的完全图,从这个图里面抽出2n−12n-12n−1条边,这些边形成一颗树,现在问你剩下的图里面点进行完美匹配有多少种方案? 解题思路: 一开始被完美匹 ...

  9. 树形dp ---- gym101667 A(贪心 + 树形dp + 两个dp方程组维护)

    题目链接 题目大意: 就是一棵5e35e35e3的树,可以选择一些点,放上基站,如果uuu上的基站价值为ddd,那么距离uuu小于等于ddd的点都会被覆盖,问使得整棵树被覆盖需要的最小价值. 解题思路 ...

最新文章

  1. 2022王道操作系统名词解释概念题
  2. 招银网络笔试java_2020招银网络科技校园招聘常见问题
  3. linux线程同步(2)-条件变量
  4. 常见的16进制文件头
  5. 反射机制2,Class类的使用
  6. H3CNE新版本V6.0与旧版本V5.1的区别
  7. js数组操作各种方法
  8. Node — 第三天
  9. laravel控制器方法中,用函数作为变量进行传递时的处理方法
  10. 蒙层禁止页面滚动的方案
  11. PAT(乙级)1016
  12. 国产达梦数据库的结合Enterprise Library的应用开发
  13. iOS 蓝牙扫描设备注意 2021-10-12
  14. 圆通问题频发背后的“罪与罚”
  15. 生物信息学分析常用网站
  16. 人工智能——自然演绎推理
  17. echarts世界地图国家及中国城市的经纬度数组整理
  18. Dell戴尔笔记本电脑灵越Inspiron 14 5420原装出厂WIN11系统恢复原厂OEM专用系统
  19. linux vim编辑器剪切,Linux下Vim编辑器访问系统剪切板
  20. R语言计量(一):一元线性回归与多元线性回归分析

热门文章

  1. linux系统故障实验,Linux常见系统故障排除
  2. 问题 A: 约瑟夫问题(普及第一关模拟)
  3. 7-2 页面置换算法--LRU (50 分)
  4. map容器的使用 逆序遍历map容器当中的数据
  5. linux多行变一列,多行转为一列
  6. [Java基础]Map集合基础
  7. [Java基础]哈希值
  8. [蓝桥杯2016初赛]交换瓶子
  9. C++ struct实现顺序表
  10. A Simple Problem with Integers POJ - 3468(线段树+区间查询+区间修改+建树+懒惰标记模板)+(树状数组)