题意

[题目链接]这怎么发链接啊。。。。。

有一个 \(n\) 个点的树,每个点有点权(点权可能为负) ,求包含点\(1\)的最

大权连通子图(的权值和) 。

\(n \leqslant 2500\)

Sol

刚开始还以为是个树形依赖背包呢。。结果发现后面给的两个vector根本就没用

直接减一下得到每个点的点权,然后xjb dp一波


#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int a[MAXN], f[MAXN];
vector<int> v[MAXN];
class FiringEmployees{
public:
void dfs(int x, int fa) {
f[x] = a[x];
for(int i = 0, to; i < v[x].size(); i++) {
if((to = v[x][i]) == fa) continue;
dfs(to, x);
f[x] = max(f[x], f[x] + f[to]);
}
}
int fire(vector <int> fa, vector <int> salary, vector <int> productivity) {
int N = fa.size();
for(int i = 1; i <= N; i++) {
a[i] = productivity[i - 1] - salary[i - 1];
//cout << fa[i - 1] << endl;
v[fa[i - 1]].push_back(i); }
dfs(0, -1);
return f[0];
}
}; int main() {
int N = read();
vector<int> a, b, c;
for(int i = 1; i <= N; i++) a.push_back(read());
for(int i = 1; i <= N; i++) b.push_back(read());
for(int i = 1; i <= N; i++) c.push_back(read());
cout << FiringEmployees().fire(a, b, c);
}
/*
6
0 0 1 1 2 2
1 1 1 2 2 2
2 2 2 1 1 1 9
0 1 2 1 2 3 4 2 3
5 3 6 8 4 2 4 6 7
2 5 7 8 5 3 5 7 9 2
0 1
1 10
5 5 4
{{0, 1, 2, 3}
{4, 3, 2, 1}
{2, 3, 4, 5}}
*/

TopcoderSRM679 Div1 250 FiringEmployees(树形dp)的更多相关文章

  1. poj3417 LCA + 树形dp

    Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4478   Accepted: 1292 Descripti ...

  2. COGS 2532. [HZOI 2016]树之美 树形dp

    可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话d ...

  3. 【BZOJ-4726】Sabota? 树形DP

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 128  Solved ...

  4. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

  5. 树形DP

    切题ing!!!!! HDU  2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #inclu ...

  6. BZOJ 2286 消耗战 (虚树+树形DP)

    给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<= ...

  7. POJ2342 树形dp

    原题:http://poj.org/problem?id=2342 树形dp入门题. 我们让dp[i][0]表示第i个人不去,dp[i][1]表示第i个人去 ,根据题意我们可以很容易的得到如下递推公式 ...

  8. hdu1561 The more, The Better (树形dp+背包)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1561 思路:树形dp+01背包 //看注释可以懂 用vector建树更简单. 代码: #i ...

  9. bzoj2500: 幸福的道路(树形dp+单调队列)

    好题.. 先找出每个节点的树上最长路 由树形DP完成 节点x,设其最长路的子节点为y 对于y的最长路,有向上和向下两种情况: down:y向子节点的最长路g[y][0] up:x的次长路的g[x][1 ...

随机推荐

  1. php 大文件读取

    当你需要处理一个5G的文件里面的数据时,你会怎么做,将文件里面的内容全部读取到一个数组里面去? 显然这种做法对小文件是没有问题的,但是对于大文件还是不行的 这时就需要用到  yield 了 ,注意这是 ...

  2. SDUT OJ 数据结构实验之链表六:有序链表的建立

    数据结构实验之链表六:有序链表的建立 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Desc ...

  3. PHP常用人工智能库

    1.NLPTools(http://php-nlp-tools.com/)NLPTools是一个PHP自然语言处理库.能进行文本分级,聚类等操作.2.Prediction Builder(https: ...

  4. 搭建git服务器(临时服务器,命令行形式,针对2到5人左右,轻量)

    服务端配置 ############################################################################################## ...

  5. 图解SQL Server 2008入门必会

    图解SQL Server 2008入门必会   https://jingyan.baidu.com/article/656db918eded1ee381249c0b.html 图解SQL Server ...

  6. QT中QWidget、QDialog以及MainWindow的区别

    参考 http://blog.csdn.net/u011619422/article/details/47311101 QT中QWidget.QDialog以及MainWindow的区别 QWidge ...

  7. POJ2449 Remmarguts' Date A*算法

    题意是让求从st的ed第k短路... 考虑A*算法:先把终点到每个点最短路跑出来(注意要建反图),当做估价函数h(u),然后跑A* 每次取出总代价最小的,即g(u)+h(u)最小的进行扩展,注意如果u ...

  8. javascript有哪些优秀的库,把你喜欢的都说出来吧

    回复格式 应用领域 ……  你喜欢的js库名称 …… 作用(一句话) web …… jquery …… 众所周知的dom操作库 seajs …… js的管理框架 ejs  ……  没有学习成本的js模 ...

  9. Redis主从、哨兵、集群的简单区别

    2018-10-26 主从:读写分离,备份哨兵:监控,自动转移,选主集群:数据 hash 分片,同时包含主从及哨兵特性

  10. PIE SDK栅格分级渲染

    1.  功能简介 栅格数据分级渲染是根据不同的分级规则,对像元值进行等级划分:并通过对每一级设置不同的显示符号和标注信息,从而达到分级显示的效果. 2.功能实现说明 2.1. 实现思路及原理说明 第一 ...