树形dp
树形dp的题
Z__X
这个作者很懒,什么都没留下…
展开
-
HLOJ 树形DP前置-DFS(树形DP入门)
题目来源:HLOJ 题目描述 给定一棵 nnn 个点的树,根为 ttt 求每个点的父亲是哪个点,ttt 的父亲输出 000 输入格式 第一行两个整数 n,tn,tn,t 接下来 n−1n−1n−1 行,每行两个整数 x,yx,yx,y,表示 x,yx,yx,y 之间有一条边 输出格式 nnn 行,第 iii 行一个整数,表示 iii 号点的父亲 样例数据 input 4 3 1 3 3 2 1 4 output 3 3 0 1 数据规模与约定 1≤n≤1051≤n≤1051≤n≤105 时间限制:1s1s原创 2020-07-30 12:23:26 · 405 阅读 · 0 评论 -
【USACO】Luogu P2986 Great Cow Gathering G (dfs,树形dp)
来源:Luogu P2986,JZOJ 题目描述 BessieBessieBessie 正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。 每个奶牛居住在 N(1<=N<=100,000)N(1<=N<=100,000)N(1<=N<=100,000) 个农场中的一个,这些农场由N-1条道路连接,并且从...原创 2020-03-31 20:35:11 · 190 阅读 · 0 评论 -
Luogu P3174 [HAOI2009]毛毛虫 (树形dp)
来源:Luogu P3174,JZOJ #460 题目描述 对于一棵树,我们可以将某条链和与该链相连的边抽出来,看上去就象成一个毛毛虫,点数越多,毛毛虫就越大。例如下图左边的树(图 111)抽出一部分就变成了右边的一个毛毛虫了(图 222)。 求最大的毛毛虫的大小。 解题思路 这道题其实是树的直径的一个变形,首先显然得找到树的最长路径(树的直径),然后在节点个数上加上与该链相连的边,就可以了;...原创 2020-02-07 17:15:18 · 865 阅读 · 0 评论 -
JZOJ #454 最大利润(树形dp入门)
来源:JZOJ #454 题目描述 政府邀请了你在火车站开饭店,但不允许同时在两个相连接的火车站开。 任意两个火车站有且只有一条路径,每个火车站最多有 505050 个和它相连接的火车站。 告诉你每个火车站的利润,问你可以获得的最大利润为多少。 例如下图是火车站网络: 最佳投资方案是在 1,2,5,61,2,5,61,2,5,6 这 444 个火车站开饭店可以获得利润为 909090 解题思路 ...原创 2020-02-07 16:09:20 · 193 阅读 · 0 评论 -
HLOJ 树形DP-树的直径(树形DP入门)
来源:JZOJ 题目描述 给定 111 棵 nnn 个点的边权树,让你求树的直径 解题思路 这题和树形dp练习4差不多,只是在 dfsdfsdfs 中的一个细节上做了一个小改动;其实,树的最长路径可以由最长链+次长链得到,这样就简单明了了 代码君 #include <bits/stdc++.h> using namespace std; long long dis[200010],...原创 2020-02-07 14:56:49 · 408 阅读 · 0 评论 -
JZOJ 数形dp练习5(树形dp入门)
来源:JZOJ 题目描述 给定一棵 nnn 个节点的树,求其中每个点到其他节点的距离和。 解题思路 首先,如果是求第一个点到其他节点的距离和应该很简答吧 void dfs(int x,int father){ sum[x]=1; //以x为根的子树中点的个数 ans+=deep[x]; //deep是点1到点x的深度 for (int i=linkk[x];i;i=e[i...原创 2020-02-07 14:30:14 · 304 阅读 · 0 评论 -
JZOJ 数形dp练习4(树形dp入门)
来源:JZOJ 题目描述 大神 hkhhhkhhhkhh 给定一棵 nnn 个点的边权树,由于他太强了,所以他想考考你。 让你求树中每个子树的最长链是多长?次长链是多长?(链可以长度为零,最长和次长链不能有相同的边) 备注,这里的链是子树中 根到节点的路径长度 解题思路 题目要求我们求最长链和次长链,当然最长链就直接迭代就好了,次长链如何求?其实,当最长链更新时,原本的最长链就是当前的次长链;但...原创 2020-02-07 10:42:15 · 317 阅读 · 0 评论 -
JZOJ 数形dp练习3(树形dp入门)
来源:JZOJ 题目描述 给定一个 nnn 个点的无权树,求树的重心? 重心定义为,在所有点中,删去该点之后,树中的所有子树的包含节点个数最多的那棵子树包含节点个数最小。 解题思路 一种简单粗暴的方法应该可以轻而易举地想出来:枚举每个点,删掉该点,找到树中的所有子树的包含节点个数最多的那棵子树,取最小值; 然而,这种方法超时妥妥的。怎么办呢? 先来看一张图 显然,我们可以得出,包含节点最多的那...原创 2020-02-06 16:52:00 · 287 阅读 · 0 评论 -
JZOJ 数形dp练习2(树形dp入门)
树形dp练习2 题目描述 给定一颗n个点的点权树,问树中每个子树的点权和,点权最大值。n≤105n≤10^5n≤105 解题思路 暴力 dfsdfsdfs,在 dfsdfsdfs 中如果找到一个 yyy 为 xxx 的子节点,递归 dfs(y)dfs(y)dfs(y),得到 yyy 子树的点权和与点权最大值后 maxx[x]=max(maxx[x],maxx[y]);sum[x]+=sum[y]...原创 2020-02-06 16:19:50 · 275 阅读 · 0 评论 -
JZOJ 数形dp练习1(树形dp入门)
来源:JZOJ 树形dp练习1 题目描述 给定一棵 nnn 个点的无权树,问树中每个节点的深度和每个子树的大小? (以1号点为根节且深度为 000 ) 解题思路 暴力 dfsdfsdfs,在 dfsdfsdfs 中如果找到一个 yyy 为 xxx 的子节点,deep[y]deep[y]deep[y] (深度)就等于 deep[x]+1deep[x]+1deep[x]+1,然后递归 dfs(y)d...原创 2020-02-06 16:17:29 · 321 阅读 · 0 评论