题意:给定一个树形图,节点数量3000。叶子节点是用户,每个用户如果能看上电视会交一定的电视费。看上电视的条件是从根到该用户的路径全部被修好,修每条边有一个费用。在不亏损(用户交钱总额>=修路总费用)的前提下,最多有多少人能看上电视。分析:树形dp。dp[u][i][j]表示对于u节点,只看其前i个...
分类:
其他好文 时间:
2015-04-05 21:36:57
阅读次数:
156
描述:如果把二叉树看成一个图,父子节点之间的连线看成双向的,定义“距离”为两个节点之间边的个数。求二叉树中相距最远的两个节点的距离。思路:相距最远的两个节点一定是叶子节点,且这两个叶子节点的路径有两种情况:1. 该路径经过root节点,则两个叶子节点分属root.left和root.right为根的...
分类:
其他好文 时间:
2015-04-05 18:43:45
阅读次数:
114
本周的基础巩固2训练了基础数据结构:队列,链表,树,图,以及DFS和BFS算法等。下面总结一下一些需要注意的地方。
数据结构结构基础中树是一个难点,因为树的定义就是递归的,因此解决和树有关的问题总是从递归的思想上去考虑。树的结构中最常见的是二叉树,二叉树自身有很多独特的数学特性,因此题目中经常见到这种树,比如本次训练的E题,利用的就是二叉树叶子结点i的深度depth与总结点数的关系:1先解决边界...
分类:
其他好文 时间:
2015-04-05 16:09:24
阅读次数:
130
B. Om Nom and Dark Park在满二叉树上的某些边上添加一些值。使得根节点到叶子节点的路径上的权值和都相等。求最少需要添加多少。我们利用性质解题。 考察兄弟节点。由于他们从跟节点到父节点这路径是相同的,所以需要添加的值为 2...
分类:
其他好文 时间:
2015-04-05 08:57:38
阅读次数:
240
让你从根走到每个叶子所要的花费都相同,请问最少得增加多少边权?
分类:
其他好文 时间:
2015-04-05 06:33:37
阅读次数:
194
B树即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字...
分类:
其他好文 时间:
2015-04-03 23:45:18
阅读次数:
160
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区...
分类:
其他好文 时间:
2015-04-03 18:45:36
阅读次数:
156
首先两两比较找到最大的元素,需要n-1次,即二叉树的非叶子节点的个数。之后次最大的一定在和最大的元素比较过的元素中,共有lgn-1个,即树的高度。故加起来就是n+lgn-2#includeusing namespace std;class Node{public: Node(); Nod...
分类:
其他好文 时间:
2015-04-03 18:45:19
阅读次数:
166
表达式的表示如图所示的二叉树表达式:a+b*(c-d)-e/f若先序遍历此二叉树,按访问结点的先后次序将结点排列起来,其先序序列为: (波兰式,前缀表达式) -+a*b-cd/ef按中序遍历,其中序序列为:a+b*c-d-e/f (中缀表达式)按后序遍历,其后序序列为:abcd-*+ef/-(逆波兰...
分类:
其他好文 时间:
2015-04-03 00:05:23
阅读次数:
184
套用回溯 公式程序:
void backtrack (int t)
{
if (t > n) {
// 到达叶子结点,将结果输出
output (x);
}
else {
// 遍历结点t的所有子结点
for (int i = f(n,t); i <= g(n,t); i ++ ) {...
分类:
编程语言 时间:
2015-04-01 17:43:01
阅读次数:
150