摘要:
解题思路: 树重心,将其与其最大子树连接的边,删除后,划分出的两个子树节点数量最大的中的最小. 题目其实是树的重心的一点变异。 树的重心是 树中所有节点的字节点数量最大中的最小的节点 O(n) 求出每个点的的子节点的最大值以及其字节点总个数,然后在线性比较下就可以求出重心了, 此题要注意, 这里要求的是 所有的(节点的子节点数量的最大值)中最小的. 解题代码: View Code #include<stdio.h>#include<string.h>#include<stdlib.h>using namespace std;#define MAX(a,b) 阅读全文
摘要:
关于分治算法在树上的应用详情请查看09年QZC国家集训队论文。题目大意: 树含N个点,点之间有权值,求两点间权值和小于等于K的点对数量( N <= 10000 )解题思路:对于以rt为根节点的树,其树上两点间一条路径只有两种情况,分别为过根节点,不过根节点。 这样,启发了我们使用分治的思想来解决此题。 若不过根节点,则通过递归处理,其实也可理解为过根节点,但过了根的那部分为0.可简化代码 若过根节点, 则 dist(i)+dist(j) <= K 且 father(i) != father(j) 其中哦功能 dist(i) 为 子树上节点到根节点rt的距离, fath... 阅读全文