树
Cliu__
自己选择的路,就算跪着也要走完!
展开
-
2017 日照夏令营 day5 t2 tree
题目大意: 给定一棵 个节点的树,树上的每个节点 有一个权值 ,每次操作中你可以选择一个包含1号节点的连通子树,将这个连 通子树上所有节点的权值加上(或减去)一个相同的非负整数,要求将所有节点变为0,且最小化所有加上(或减去)的 非负整数之和 树形DP f[i]表示把以i为根的子树都变为0时在i上的最少累加值 g[i]表示把以i为根的子树都变为0的在i上的最少累减值 f[原创 2017-08-04 11:39:37 · 435 阅读 · 0 评论 -
洛谷P1122 最大子树和
题目连接:https://www.luogu.org/problem/show?pid=1122 解题思路: 这是一道类似于树形DP的题。 我们可以用求最大字段和的方法求最大子树和,所以问题就转化成了如何在遍历树记录子树和。 我们可以用f[x]数组储存以x为根的子树和,一直搜到它最远的儿子,然后返回时如果当前的值>0就说明能产生影响,就加上,然后标记该点,用ans储存最大的子树原创 2017-08-19 21:24:00 · 462 阅读 · 0 评论 -
洛谷P2015 二叉苹果树
一道树型DP,不过这道题是按照边来做的,和点略有不同,因为累加的是边的权值,并且取m条边,那对于每个子树而言,它选的边肯定是 min(k,m),k表示子树中的边数,所以要dfs 找边数。 接下来是树型DP的常用套路了 dp[i][j]表示以i为根选j条边产生的值,状态为 根 与 子树,还需要加上权值。 详情见代码#include<iostream> #include<cstdio> using原创 2017-08-05 22:08:03 · 209 阅读 · 0 评论 -
洛谷P2014 选课
又是一道树型DP,不过这次是以点带权值,因为根是不确定的,我们可以设个虚根 0 ,因为算是多了一点,所以总点数应该++。 因为是点带权值,所以不用dfs边的数量了,不过有一点虚注意,因为多了一个点,所以j层循环(所选的边数)下界应该是到2的。#include<iostream> #include<cstdio> using namespace std; int n,m,s,x,y,dp[305][原创 2017-10-03 23:11:36 · 319 阅读 · 0 评论