![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
DP——树形dp&&换根dp
树上dp
_昨日不可追
这个作者很懒,什么都没留下…
展开
-
ICPC NEAU Programming Contest 2020 G选根(换根dp)
传送门题意:思路:相当于换根dp的裸题吧,和P3478 [POI2008]STA-Station基本一样不同点就是,这个题每个结点的权值为wi代码:ll dep[MAXN],sz[MAXN],fath[MAXN],dfn[MAXN];ll w[MAXN];ll ans[MAXN];ll sum;vector<int>p[MAXN];void dfs(int x,int fa){ dep[x]=dep[fa]+1; fath[x]=fa; sz[x]原创 2020-08-17 21:05:35 · 151 阅读 · 0 评论 -
P3478 [POI2008]STA-Station(换根dp)
传送门题意:思路:可以发现对于一个结点x和他的儿子y以x为根换成以y为根时,以v为根的子树上的所有结点的深度都减小1,其他结点的深度都增加1dp[y]=dp[x]+siz[y]+(n-siz[y])代码:#include <bits/stdc++.h>#define pb push_back#define lb lower_bound#define ub upper_bound#define fi first#define se second#define all(x原创 2020-08-17 20:39:16 · 218 阅读 · 0 评论 -
树的最长路径(树上dp,dfs)边权
传送门题意:给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。现在请你找到树中的一条最长路径。换句话说,要找到一条路径,使得使得路径两端的点的距离最远。注意:路径中可以只包含一个点。代码:dp[x],表示从x出发的子树中的最长路径#include <iostream>#include <stdio.h>#incl...原创 2020-02-24 15:40:46 · 924 阅读 · 0 评论 -
F:maki和tree( 树上dp dfs )
2020牛客寒假算法基础集训营1题意:思路:只用找到每个黑点,对于每个黑点来说看他的每个子树白色点的个数路径有两种情况1,黑点直接到白色点子树的路径2,从白色点子树到黑点再到另一个白色子树的路径代码:两种写法树上dp#include <iostream>#include <stdio.h>#include <algorithm>#...原创 2020-02-22 15:18:13 · 226 阅读 · 0 评论 -
B:树上子链 (dfs,树上dp)点权
传送门题意:给定一棵树 T ,树 T 上每个点都有一个权值。定义一颗树的子链的大小为:这个子链上所有结点的权值和 。请在树 T 中找出一条最大的子链并输出。就是求树上的最长路径dp[x]代表到x的子树中的路径的最大值代码:#include <iostream>#include <stdio.h>#include <algorithm>#...原创 2020-02-24 13:23:50 · 305 阅读 · 0 评论