
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 · 183 阅读 · 0 评论 -
P3478 [POI2008]STA-Station(换根dp)
传送门 题意: 思路: 可以发现对于一个结点x和他的儿子y 以x为根换成以y为根时,以v为根的子树上的所有结点的深度都减小1,其他结点的深度都增加1 dp[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 · 373 阅读 · 0 评论 -
树的最长路径(树上dp,dfs)边权
传送门 题意: 给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。 现在请你找到树中的一条最长路径。 换句话说,要找到一条路径,使得使得路径两端的点的距离最远。 注意:路径中可以只包含一个点。 代码: dp[x],表示从x出发的子树中的最长路径 #include <iostream> #include <stdio.h> #incl...原创 2020-02-24 15:40:46 · 981 阅读 · 0 评论 -
F:maki和tree( 树上dp dfs )
2020牛客寒假算法基础集训营1 题意: 思路: 只用找到每个黑点,对于每个黑点来说看他的每个子树白色点的个数 路径有两种情况 1,黑点直接到白色点子树的路径 2,从白色点子树到黑点再到另一个白色子树的路径 代码: 两种写法 树上dp #include <iostream> #include <stdio.h> #include <algorithm> #...原创 2020-02-22 15:18:13 · 271 阅读 · 0 评论 -
B:树上子链 (dfs,树上dp)点权
传送门 题意: 给定一棵树 T ,树 T 上每个点都有一个权值。 定义一颗树的子链的大小为:这个子链上所有结点的权值和 。 请在树 T 中找出一条最大的子链并输出。 就是求树上的最长路径 dp[x]代表到x的子树中的路径的最大值 代码: #include <iostream> #include <stdio.h> #include <algorithm> #...原创 2020-02-24 13:23:50 · 361 阅读 · 0 评论