分析: 树形dp刚刚入门,这是我做的第一个一个点同时受父亲节点和儿子节点控制的题目。 由于这个题中某一个点放不放保安与父亲和儿子都有关系(因为线段的两个端点嘛),所以我们做题时就要考虑全面。 假设dp数组为f[i][j]f[i][j]:其中f[i][0]f[i][0]表示选择自己(本身这个点),f[ ...
分类:
其他好文 时间:
2018-10-28 11:09:02
阅读次数:
198
嘟嘟嘟 暴力不难想:一种是以每一个骑士为主,一步步向上爬直到死了;一种是以每一个城池为主,统计哪些骑士在这座城池中死了,然后剩下的骑士再转移到他的父亲节点。 考虑优化:因为城池构成了一个树形结构,相对于骑士来说结构比较固定。因此我们想办法优化第二个暴力:每一个节点建一个小根堆,一直弹出堆顶直到堆顶骑 ...
分类:
其他好文 时间:
2018-10-17 10:58:36
阅读次数:
158
LCA的定义: 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点, 而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点, 其实就是是两个点在这棵树上距离最近的公共祖先节点。 用途: 主要用来处理两个点有且只有一条确定的最短路径时的路径。 如何求解LCA: 1.倍增: 所谓倍增就是成 ...
分类:
其他好文 时间:
2018-10-08 21:39:03
阅读次数:
169
题目大意 求树中每个点到任意点的最长距离 思路 该距离有两种,一种是经过父亲节点的,一种是子树里的 定义dp[x][0/1]表示x到叶子节点的最大距离和次大距离 dp[x][2]表示经过父亲节点的最长路径 dp[x][2]可以是先走到父亲节点,再走到父亲的其他儿子,也可能是走到父亲节点再走到父亲的父 ...
分类:
其他好文 时间:
2018-10-02 17:34:32
阅读次数:
143
树链剖分就是将树分割成多条链,然后利用数据结构(线段树、树状数组等)来维护这些链。 首先就是一些必须知道的概念: 重结点:子树结点数目最多的结点; 轻节点:父亲节点中除了重结点以外的结点; 重边:父亲结点和重结点连成的边; 轻边:父亲节点和轻节点连成的边; 重链:由多条重边连接而成的路径; 轻链:由 ...
分类:
其他好文 时间:
2018-09-25 23:01:40
阅读次数:
343
题目:戳这里 学习博客:戳这里 题意:给一个树加最少的边,使得1到所有点的距离小于等于2. 解题思路:分析样例3可以看出,如果一个点到1的距离大于2,那么建立1到该点的父亲节点的边将比直接与该点建边更优。官方题解的做法是把所有与1距离大于2的点放到大顶堆里维护,每次取出最远的点,染色与该点父节点以及 ...
分类:
其他好文 时间:
2018-09-06 02:48:14
阅读次数:
312
这是LCA算法中的一种,Tarjan算法 其实这么说也有点不对,应该是Tarjan+DFS进行解决 LCA又称为最近公共祖先 那么什么是最近公共祖先: 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点 而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,最近公共祖先就是 ...
分类:
其他好文 时间:
2018-09-06 02:35:15
阅读次数:
126
Description Solution 对于操作1,不论选了哪个点为a,最后反转颜色的点集都只有两种类型(显然啦)。 暴力解法:对每个操作3,从a向上直到根节点,每到一个节点记录(它父亲的黑点数减去自己的黑点数)*父亲节点的编号。另外,还要记录a子树内的黑点。。 这种O(n2)的做法肯定会爆,考虑 ...
分类:
其他好文 时间:
2018-08-31 13:19:22
阅读次数:
182
试题限制均为128MB,1Sec 总分150. 试题一 A题 问题描述: 小A得到了一棵美丽的有根树。这棵树由n个节点以及n 1条有向边构成,每条边都从父亲节点指向儿子节点,保证除了根节点以外的每个节点都有一个唯一的父亲。树上的节点从1到n标号。该树的一棵子树的定义为某个节点以及从该节点出发能够达到 ...
分类:
其他好文 时间:
2018-08-29 16:58:17
阅读次数:
134
堆 一些注意点:左儿子的编号是自己的编号*2+1右儿子的编号是自己的编号*2+2父亲节点的编号是(自己的编号-1)/2 手动实现的堆,贴一段书上的代码: 1 #include <iostream> 2 3 using namespace std; 4 5 int const MAX_N=233333 ...
分类:
其他好文 时间:
2018-08-09 13:55:01
阅读次数:
149