数据结构 dfs序
文章平均质量分 87
Fsss_7
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #316 (Div. 2)D. Tree Requests
链接:http://codeforces.com/contest/570/problem/D题意:给定一棵n个节点的树(1为根),每个节点上有一个小写字母,m个询问:给定v,h,问在以v为根的子树中深度为h(相对整棵树的深度)的所有点的字符能否组成回文串。分析:我们来将题目分解一下,首先我们确定构成回文串的条件,很显然要求“字母个数为奇数的字母小于等于1”,这里我们可以用异或储存偶数为0奇原创 2016-03-30 22:36:45 · 439 阅读 · 0 评论 -
bzoj1103[POI2007]大都市meg
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1103题意:中文题。分析:题目要求的是每次都是从节点1计算到节点x的距离,我们可以利用长度为2*n的dfs序的性质,因为在dfs序中我们会保存节点i进入时间l[i]和出去时间r[i],那么我们可以设置一个树状数组记录前缀和,我们将所有的l[i]位置+1,所有的r[i]位置-1。这样有什么原创 2016-03-30 23:33:06 · 648 阅读 · 0 评论 -
bzoj3306: 树
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3306题意:中文题。分析:因为题目要求查询子树中的最小值,很明显想到dfs序。但是还有一个操作:换根。这个问题看上去不好处理,但是其实自己画画图就能很好的将换根之后的情况进行处理了,假设当前询问x根为root,这是我们只要分类讨论:当x==root,return tr[1]。当lca(x原创 2016-04-06 16:50:54 · 509 阅读 · 0 评论 -
hdu4358Boring counting
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4358题意:给定一棵n个节点的树和k,每个点有点权,再给q个询问,每次询问:在以v为根的子树中有多少个数恰好出现了k次。分析:遇到子树问题,首先考虑到的就是dfs序,然后发现还有一个条件k。我的处理方式是:先离散化,然后构出dfs序,然后处理出in[],out[],lose[]数组,如果当前i中的数原创 2016-04-06 20:24:36 · 494 阅读 · 0 评论 -
bzoj3653: 谈笑风生
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3653题意:中文题。分析:很明显这题可以分为两种情况:(1)b是a的祖先,那么有min(de[a]-1,y)种选择,c就随便选一个a子树中的点就行了。(2)b是a的子孙,c是b子树中的点,且b距离a小于等于k。第一种情况没压力,第二种情况才是关键。子树问题,我们优先想到dfs序,然后问题原创 2016-04-06 22:36:49 · 913 阅读 · 0 评论 -
bzoj2286: [Sdoi2011消耗战
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2286题意:中文题。分析:题目中要求所有的关键点与根1断开,很容易想到树形dp。但是由于多组询问会导致时间*m。单次O(n)不可取。很显然是要优化的,我们发现单次O(n)时还是会做很多无用功,而且题目说sigma(ki)代码:#include#include#include原创 2016-04-07 20:23:07 · 1908 阅读 · 0 评论 -
bzoj2434: [Noi2011]阿狸的打字机
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2434题意:中文题。分析:给定一个这样的字符串很容易就想建一颗trie树。然后在trie树上进行匹配,这不就是AC自动机么!我们可以直接考虑这样的一种暴力,当查询x,y时我们只要将从root到y路径上所有的点沿着fail跑一遍,只要经过一次x就ans+1。但是这样会超时,我们在观察这个结原创 2016-04-10 21:07:40 · 382 阅读 · 0 评论 -
bzoj3611: [Heoi2014]大工程
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3611题意:中文题。分析:同消耗战是一类题,询问过多,但是关键节点少,那么我们先建虚树(最大2*max个节点),同消耗战建虚树。然后在树上跑一遍DP即可。O(max*logn)代码:#include#include#include#include#include#inc原创 2016-04-11 20:56:18 · 503 阅读 · 0 评论 -
hdu5692Snacks
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5692题意:中文题。分析:我们以0为根建树,那么题目就变成了单点修改,查询在以x为根子树中的到根距离最大的点。我们可以直接用dfs序做,dfs序就是根据dfs的顺序将树上节点出现的先后顺序记录下来形成一个2*n的序列,那么每个节点出现两次,以x为根的子树被包含在x出现的两次的区间中。那么我们只需要在原创 2016-07-20 21:51:13 · 760 阅读 · 0 评论