
数据结构
文章平均质量分 64
LBJHan
经历过就是财富
展开
-
Tree POJ - 1741(点分治)
Tree 题目链接:POJ - 1741 题意:一颗无根树,已知树上的每条边及其权值,求出满足两点之间距离不超过k的点对的个数; 思路:假设根为r, 对于i, j两点之间的路径有两种情况: 1:经过根节点,此时i, j间的距离为dis[i][r]+dis[j][r]; 2:不经过根节点,此时i, j两点必定在同一棵子树上,i, j间的距离就是dis[i][r.son]+dis[j][r...原创 2018-08-23 19:42:37 · 490 阅读 · 0 评论 -
Free tour II SPOJ - FTOUR(点分治)
Free tour II 题目链接:SPOJ - FTOUR 题意:有一棵N个节点的树,每个节点要么被染成黑色,要么被染成白色,要求找出一条权值和最长的路径,使得路径上的黑色点的个数不超过k; 在看《分治算法在树的路径问题上的应用》这篇论文时看到的题,就拿来做了,搞了一天,才做出来,论文中此题解法只是大致谈了一下思想;看了半天,只看了个一知半解,感觉无处下手, 尝试着写一篇博客,可能也将不太...原创 2018-08-24 13:11:28 · 236 阅读 · 0 评论 -
Balanced Lineup POJ - 3264(RMQ)
Balanced Lineup POJ - 3264 题目连接 题意:给出一个数列,Q个询问,问区间[A, B]中最大值与最小值的差; 思路:线段树可以做,维护最大最小值,直接查找就可以;但是现在要用RMQ做; 何为RMQ?(Range Minimum/Maximum Query) 区间最值询问,通过O(nlogn)的预处理可以在O(1)的时间内找到区间的最值;下面以最大值为例: 令Fm...原创 2018-09-14 19:28:50 · 322 阅读 · 0 评论 -
How far away ? HDU - 2586(LCA Tarjan离线方法 or 倍增在线方法)
How far away ? HDU - 2586 题目链接 题意:给出一棵树,问任意两点的间的最小距离; 思路:考虑本题,若t时a, b的LCA,r是树根那么dis[a, b]=dis[r, a]+dis[r, b]-2*dis[r, t]; dis[r, p] (根到p点的距离) 可以通过dfs求得,那么找出[a, b]的LCA就万事大吉了; 首先是Tarjan离线方法: ...原创 2018-09-14 19:57:04 · 253 阅读 · 0 评论 -
KMP学习篇——next数组计算及应用,KMP匹配
众所周知, KMP是个神奇的算法,不少人都会使用,但是大部分人只是只知其然不知其所以然(像今天之前的我,模板记得溜溜的,但是却不知道是怎样一步一步推导而来的),下面我就来详细探讨一下; 首先学习一个算法,要首先知道该算的是什么,是用来做什么的; KMP算法,就是一个用来匹配字符串的优秀算法,由D.E.Knuth、J.H.Morris和V.R.Pratt三位大牛同时发现的,因此人们称它为克努特——莫...原创 2019-03-13 15:54:22 · 682 阅读 · 0 评论 -
树的遍历——前序,后序,中序的递归与迭代解法,以及层序的队列解法
#include<bits/stdc++.h> using namespace std; struct TreeNode{ int val; struct TreeNode *left, *right; }; TreeNode* buildTree(TreeNode *root, int val){ TreeNode *T = (struct TreeNode*)malloc(s...原创 2019-03-28 20:53:39 · 552 阅读 · 0 评论