随笔分类 - DFS
摘要:题目链接 题解:经典的树形DP,跑两遍即可,第一遍记录出每个点为根时向下所能构成的最大的值(cnt_-cnt_),第二遍统计出每个点为根时的答案,此时的根包括其父,所以在第二次dfs时要减去再回溯 #include<bits/stdc++.h> using namespace std; #defin
阅读全文
摘要:"题目链接" 题意:给你一棵树,让你求每个点之间的距离的最短之和 题解:看到最短之和,想到最小生成树,且每条边权不同,最小生成树唯一,就转换问题为,求一棵树上每个点到所有点的距离之和,这就是树形dp,先对一个点跑dfs,求出该点到所有点的距离之和,统计每个点的子树个数,并假设该点为根,再跑一次dfs
阅读全文
摘要:"题目链接" 转换一下问题就是求每个点的最大长度,容易想到树的直径,一个点的最大长度就是他到两个端点长度的最大值,那我们就可以跑3遍dfs,第一遍求出直径的一个点,第二遍求出每个点到这个点的最大距离,第三遍利用第二遍求得的直径的另一点,反向跑,答案就是两者的最大值 这题好像还可以用点分治或者两遍df
阅读全文

浙公网安备 33010602011771号