Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any node from the tree yields a forest: a collection of one or more trees. ...
分类:
其他好文 时间:
2018-11-14 21:03:04
阅读次数:
156
一、基本概念 树形DP,即在树上进行DP。一般都用递归的形式进行实现,根据叶子节点的信息对根节点进行DP。 二、经典问题 1、树的重心 重心的定义:若删去树中的一个点,使得树中各联通块中的最大连通块的结点数最小,则称这个点为树的重心。 实现方法:将无根树转化为有根树,用dfs处理出每个点的的子树大小 ...
分类:
其他好文 时间:
2018-10-05 23:04:36
阅读次数:
235
题目大意:给出一棵树,树的生成图G上任意两点相连且两点的距离为树上两点的带权距离,求图上最短的哈密顿回路。 坑点:如果一直想从哈密顿回路入手,那你就要GG了,像我一样想出一个错解DP。 然而,只需画几个图,你就会大致猜出一个方法:以树的重心为根,把书分为若干部分且每个部分大小不超过n/2,那么必定有 ...
分类:
其他好文 时间:
2018-09-29 21:31:01
阅读次数:
195
方法:指针扫描数组 每次选择树的重心作为树根,从树根出发进行一次DFS,求出点到树根的距离,把节点按照与树根的的距离放进数组d,设置两个指针L,R分别从前、后开始扫描,每次满足条件时答案累加R-L。,之后减去子树的满足条件的情况,删除根节点,对其子树继续上述操作,不断累加答案。 代码: ...
分类:
其他好文 时间:
2018-09-26 22:10:16
阅读次数:
203
题目链接:https://vjudge.net/problem/POJ-1655 Consider a tree T with N (1 <= N <= 20,000) nodes numbered 1...N. Deleting any node from the tree yields a fo ...
分类:
其他好文 时间:
2018-09-07 20:44:52
阅读次数:
182
<题目链接> 题目大意:给你一棵树,任意去除某一个点后,树被分成了几个联通块,则该点的平衡值为所有分成的连通块中,点数最大的那个,问你:该树所有点中,平衡值最小的那个点是什么? 解题分析: 运用递归,找到以u为根节点,所有子节点数的最大值,然后求出这些最大值的最小值。 2018-08-17 ...
分类:
其他好文 时间:
2018-08-17 11:20:17
阅读次数:
139
题面 "题目传送门" 解法 动态点分治模板题 什么是动态点分治呢??? 静态的点分治就是不断地找到当前树的重心,然后分成若干个子树继续递归下去 但是如果有修改似乎静态的就不好处理了 我们现在引入一个叫点分树的东西 说白了,就是每一次静态点分治的时候这一次的重心和上一次的连边,这样形成了一棵树 再说清 ...
分类:
其他好文 时间:
2018-08-14 22:52:10
阅读次数:
185
闲话 一个计数问题入门级选手来搞这种东西 最初的动力来自高一化学课有机物(滑稽)。《同步导练》出了个这样的选择题。 一个结构极其庞大的烷烃(二十几个碳原子),求它的主链长度。 这不是个求树的直径的裸题么?!OI选手扫两眼就出来了,然而别的同学费劲心思找完了还是错的。 于是第一次在常规课中体验到作为O ...
分类:
其他好文 时间:
2018-08-11 01:20:31
阅读次数:
282
给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. 首先要知道什么是树的重心,树的重心定义为:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重 心后,生成的多棵树尽可能平衡. 实际上树的重心在树的点分治中有 ...
分类:
其他好文 时间:
2018-08-11 01:18:20
阅读次数:
153
在说点分治之前先说一下序列分治,序列分治大家都知道吧,就是把序列从某个位置(一般是中间点)分成两部分,统计跨越两部分的答案再递归处理两部分。树的点分治的道理和序列分治很像,但树没有中点,该怎么分治呢?再对比序列分治,序列相当于一条链,而序列的中点就是这条链的重心,那么树的分治点就可以是这棵树的重心。 ...
分类:
其他好文 时间:
2018-06-14 21:07:25
阅读次数:
232