
树
文章平均质量分 70
Lndulge.
一个蒟蒻 OIer
还在努力中 noip加油!
这个博客用来记录笔记和做的题。。
展开
-
[笔记]: 树状数组
主要看图 i往上找就是i+=2^k; 往下就是减 k是i的二进制右边0的个数 2^k 直接等于i&(-i); 传送门:写的很好 总结 首先,明白树状数组所白了是按照二分对数组进行分组;维护和查询都是O(lgn)的复杂度,复杂度取决于最坏的情况,也是O(lgn);lowbit这里只是一个技巧,关键在于明白c数组的构成规律;分析的过程二进制一定要深入人心,当作心目中的原创 2017-05-23 15:31:04 · 269 阅读 · 0 评论 -
[codevs]: 线段树练习1-4
题目较多就不贴了^_^ 都是线段树入门模板题 比较简单的题目原创 2017-05-29 17:29:08 · 281 阅读 · 0 评论 -
[hdu&poj&洛谷] 经典线段树练习题
1.hdu1166敌兵布阵#include#include#define maxn 50000int ans;struct node { int left,right,sum; int mid() { return (left+right)>>1; }}tree[maxn*4];void btree(int left,int r原创 2017-06-01 08:10:10 · 798 阅读 · 0 评论 -
[笔记]: 最小生成树Kruska
转自:http://blog.youkuaiyun.com/lulipeng_cpp/article/details/7800865kruskal算法的精髓在于:每次选取一条边。该边同时满足:1、在当前未选边中权值最小;2、与已选边不构成回路。直到选取n-1条表是算法结束。找到MST活判断不存在MST。 代码设计:1、利用优先级队列将权值小的边放到队列最转载 2017-06-05 16:52:48 · 284 阅读 · 0 评论 -
[练习] LCA练习1(最基础)
hdu 2586 How Far Away?lca求最短距离(模板题)#include#include#include#include#include#include#define N 40005using namespace std;int n,m;int num=0;int b[2*N],w[2*N],nt[2*N],p[2*N];int fa[N][20],d[N原创 2017-06-02 11:54:52 · 406 阅读 · 0 评论 -
[练习]:LCA练习2
LCA练习题原创 2017-06-06 16:06:23 · 305 阅读 · 0 评论 -
[noip2013] 货车运输(最大生成树+并查集+LCA)
货车运输描述A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。格式输入格式第一行有两个用一个空格隔开的整数 n,m,表示 A 国有 n 座城市和 m 条道路。接下来 m 行每行 3 个整数 x、原创 2017-06-02 15:18:30 · 530 阅读 · 0 评论 -
[bzoj2144]: 跳跳棋
2144: 跳跳棋Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 689 Solved: 326[Submit][Status][Discuss]Description跳跳棋是在一条数轴上进行的。棋子只能摆在整点上。每个点不能摆超过一个棋子。我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置。我们要原创 2017-06-02 15:53:27 · 563 阅读 · 0 评论 -
[笔记]: LCA最近公共祖先
LCA(Least Common Ancestor),顾名思义,是指在一棵树中,距离两个点最近的两者的公共节点。也就是说,在两个点通往根的道路上,肯定会有公共的节点,我们就是要求找到公共的节点中,深度尽量深的点。还可以表示成另一种说法,就是如果把树看成是一个图,这找到这两个点中的最短距离。倍增法求LCA(在线做法) 详细见注释/*LCA(Least Common Ancestors)原创 2017-06-01 11:38:50 · 247 阅读 · 0 评论 -
[笔记]: 树链剖分
树链剖分:对于每个结点 连接子节点多的那个子树的边叫做重边重边连起来成链 叫重链 (不止是只有一条重链) 使用线段树或者其他的数据结构存重链 用此数据结构进行操作 两个dfs操作 : 第一个dfs 求出重链 深度dep数组 父节点fa数组 和每个结点的子结点个数size数组 知道了size才可以求出重链 第二个dfs 连接重链 对于每个重链 重链的标号为第一个结点的编号原创 2017-06-05 16:57:28 · 247 阅读 · 0 评论 -
[练习]: 并查集&最小生成树练习题
等会再补Orz原创 2017-06-06 18:47:33 · 433 阅读 · 0 评论 -
[codevs]: 切水果(线段树)
1299 切水果 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 简单的说,一共N个水果排成一排,切M次,每次切[L,R]区间的所有水果(可能有的水果被重复切),每切完一次输出剩下水果数量 数据已重新装配,不会出现OLE错误 时限和数据范围适当修改,避免数据包过大而浪费空间资源输入描述 Input De原创 2017-05-29 17:54:10 · 389 阅读 · 0 评论 -
[noip 2012] 换教室(线段树)
借教室 描述 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj原创 2017-05-29 18:14:15 · 267 阅读 · 0 评论 -
[vijos 1659]: 河蟹王国
河蟹王国 描述 河蟹王国有一位河蟹国王,他的名字叫羊驼。河蟹王国富饶安定,人们和谐相处。有一天,羊驼国王心血来潮,想在一部分人中挑出最和谐的人。于是,羊驼国王将他的子民排成了一列(==!!b汗~好长呀)。每个人都有一个初始的和谐值。羊驼国王每次会选择一个区间[L,R],这个区间中和谐值最大的人就是国王选出的人。而且,在某一时间,区间[L’,R’]里的人会变得熟悉,因此他们每个人的和谐值都会上升一原创 2017-05-29 18:28:49 · 282 阅读 · 0 评论 -
[笔记]: 二叉树 遍历转换
遍历命名 根据访问结点操作发生位置命名: ① NLR:前序遍历(Preorder Traversal 亦称(先序遍历)) ——访问根结点的操作发生在遍历其左右子树之前。 (中 左 右) ② LNR:中序遍历(Inorder Traversal) ——访问根结点的操作发生在遍历其左右子树之中(间)。 (左 中 右) ③ LRN:后序遍历(Postorder Traversal)原创 2017-05-16 19:55:20 · 519 阅读 · 0 评论 -
[noip 2004普及组] FBI树
描述我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下: 1) T的根结点为R,其类型与串S的类型相同; 2) 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和原创 2017-05-17 14:29:59 · 519 阅读 · 0 评论 -
[笔记]: 哈弗曼树(最优二叉树)
给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 哈夫曼树(霍夫曼树)又称为最优树. 1、路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第原创 2017-05-17 16:38:53 · 468 阅读 · 0 评论 -
[笔记]: 二叉排序树
二叉排序树: 二叉树中每个数都有 左结点小于根结点小于右结点 二叉排序树的中序遍历就是结点的data从小到大排序 建树过程: 对于每个结点 从根结点出发 如果大于结点就往右走 小于就往左走 如走到一个结点为空 则将此结点建入树 /* 如输入 31524 树为 3 1原创 2017-05-18 09:34:12 · 407 阅读 · 0 评论 -
[笔记]: 树转二叉树
给出一个多叉树 那么怎么将树转换为一个二叉树呢?/*树-->二叉树 给出一棵树 将此树转化为二叉树采用兄弟表示法 如给出: A B C D E F转化为: A B E C F D转换方法将 树的 最左结点作为二叉树的左节点 从第二个结点开始(左节点的兄弟) 作为二叉数中的右儿子 如例子中的 c是b的兄弟 所原创 2017-05-18 10:22:57 · 326 阅读 · 0 评论 -
[vijos 1448]: 校门外的树(树状数组/线段树)
描述校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的…… 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K=1,读入l、r表示在区间[l,r]中种上一种树,每次操作种的树的种类都不同 K=2,读入l,r表示询问l~r之间能见到多少种树 (l,r>0) 格式输入格式第一行n,m表示道路总长为n,共有m个操作 接下原创 2017-05-23 16:36:44 · 661 阅读 · 0 评论 -
[noip 2013]火柴排队(树状数组/线段树 求逆序对)
描述涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同,两列火柴之间的距离定义为: ) 2 ,其中 a_ia i 表示第一列火柴中第 i 个火柴的高度,b_ib i原创 2017-05-24 09:36:45 · 291 阅读 · 0 评论 -
[poj 3321]:Apple Tree(树状数组/线段树 和dfs序)
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 29084 Accepted: 8633 Description There is an apple tree outside of kaka’s house. Every autumn, a lot of apples wi原创 2017-05-24 14:08:59 · 1178 阅读 · 0 评论 -
[笔记]: 记忆化搜索+hash优化&树形dp
1.记忆化搜索记忆化搜索就是搜索过程中记下搜索的值 很简单 没什么好说的下面是一个简单的斐波拉契数列的记忆化搜索代码#include#include#include#include#include#include#define N 100000using namespace std;int f[N];int dfs(int x){ if(f[x]) return f原创 2017-06-07 10:44:55 · 574 阅读 · 0 评论 -
[zoj]: 1610 & [poj]: 2777 (颜色覆盖题)
zoj1610 Count the ColorsTime Limit: 2 Seconds Memory Limit: 65536 KB Painting some colored segments on a line, some previously painted segments may be covered by some the subsequent ones. Your原创 2017-05-29 18:46:01 · 436 阅读 · 0 评论 -
[练习]: 树链剖分练习题
这些是一些树剖的基础题 难度从低到高 初学者一定要做一做。。1.洛谷p3384树链剖分模板//一定记得任何算值的地方取模。。还有注意add和query时候深度小的在前面!不然线段树会卡死 #include#include#include#include#include#include#define ll long long#define N 100005#define l原创 2017-06-07 10:39:59 · 386 阅读 · 0 评论