
[S]树
文章平均质量分 78
GooZy
程序宅一枚。没事写写代码,打打游戏,看看动漫~
展开
-
[POJ 2777]Count Color[线段树区间更新查询]
题目链接:[POJ 2777]Count Color[线段树区间更新查询] 题意分析: 给出一个长为L的长板,划分成L个单元,每个单元初始时颜色为1。先给出O个操作,包含更改区间l,r为颜色c和查询区间l,r中有多少种不同的颜色。颜色数不超过30个。 解题思路: 题目需要查询的是区间中有多少种不同的颜色,而颜色数又不超过30个,我们可以用二进制来表示一个区间中拥有的颜色,更新的时候等于两个子原创 2015-09-25 13:49:42 · 692 阅读 · 0 评论 -
[AOJ 2170]Marked Ancestor[并查集][离线][路径压缩]or[线段树]
题目链接:[AOJ 2170]Marked Ancestor[并查集][离线][路径压缩]or[线段树]题意分析:结点1为根结点,初始时已经染过颜色。给出N - 1行,第i行代表第i + 1个结点的父亲结点是哪个结点。现在给出最多1e5个结点,1e5个查询。查询操作分两种,Q X代表查询结点X的最近的被染色的父或者祖先结点被染色的编号,M X代表对结点X染色。问:所有查询完之后,Q原创 2016-01-15 23:12:29 · 880 阅读 · 0 评论 -
[HDU 3848]CC On The Tree[dfs]
题目链接:[HDU 3848]CC On The Tree[dfs]题意分析:求树上任意两个叶子结点之间距离的最小值。解题思路:考虑从树上任意一个非叶子结点开始dfs遍历,求出距离该点最短和次短的两个叶子节点,更新答案:ans = min(ans, 最短 + 次短)。如果每一个都这样求很容易就超时了,可以发现,之前的结果可以接着用,比如新结点遍历到了之前已经遍历过的结点,那么只要返原创 2016-01-03 11:12:44 · 446 阅读 · 0 评论 -
[HDU 4263]Red/Blue Spanning Tree[kruskal]
题目链接:[HDU 4263]Red/Blue Spanning Tree[kruskal]题意分析:n个点,m条边,每条边染色为红色或者蓝色,问:是否存在含有k条蓝色边的生成树?是,输出1,否,0。解题思路:kruskal算法在生成最小生成树时使用了并查集思想,这题只要求生成一棵生成树,不用想排序之类的事。优先蓝边做一次生成树,此时使用的蓝边个数为mx;接着优先红边,接着蓝边做一原创 2016-01-03 23:13:46 · 643 阅读 · 0 评论 -
[UVA 10459]The Tree Root[树上最长距离]
题目链接:[UVA 10459]The Tree Root[树上最长距离]题意分析:以树上每个点作为根,算出每个点作为根的最大深度,最大深度最小的点称为“好点”,深度最大的点称为“坏点”,输出所有的好点和所有的坏点。解题思路:这题只需要找到树上最远的两个端点,从这两个端点dfs更新每个点到这两个端点之一的最大距离即可。用到的结论是:最长距离,一定是该点和这两个端点其中之一之间的原创 2015-12-05 21:09:11 · 688 阅读 · 0 评论 -
[hihoCoder 1014]Trie树[前缀树][前缀树的建立]
题目链接:[hihoCoder 1014]Trie树[前缀树][前缀树的建立]题意分析:就是题目上那么写的题意XD解题思路:建立前缀树个人感受:当做模板记下,方便日后回忆。加了些个人注释~具体代码如下:#include #include #include #include using namespace std;const int MAXN = 1e6 + 111;原创 2015-06-23 23:47:17 · 454 阅读 · 0 评论 -
[UVA 11402]Ahoy, Pirates![线段树]
题目链接:[UVA 11402]Ahoy, Pirates![线段树]题意分析:给出只包含01的字符串,F操作把区间[a,b]的字符变成1,E操作把区间的字符变成0,I操作把区间中的1变0,0变1,Q操作查询区间中的1的个数。解题思路:使用线段树区间更新与查询解决本题。特设一个lazy数组,但lazy为1代表这个区间都是1,0代表这个区间都是0,-1代表这个区间成分不纯。个人感原创 2016-01-24 23:36:38 · 531 阅读 · 0 评论 -
[UVA10410]Tree Reconstruction[BFS、DFS序建树]
题目链接:[UVA10410]Tree Reconstruction[BFS、DFS序建树]题意分析:给出一棵树的BFS、DFS序(如果两节点有同一根节点,则按升序给出顺序)。按升序写出各个节点的子节点(多种答案只需输出其中一种)解题思路:注意到:DFS序其实就是树的前序遍历(根节点,左子树,右子树)。所以dfs序的第一个就是第一个根节点。然后BFS序就是从内往外,距离不断加一遍历,涟漪的原创 2015-07-25 21:34:39 · 1142 阅读 · 0 评论 -
[POJ 1741]Tree[树分治]
题目链接:[POJ 1741]Tree[树分治]题意分析:统计树上一共有多少对结点,两者之间的最短距离不超过k。解题思路:1e4个点,暴搜肯定是不行的。这里我们采用树分治来解决这个问题。大体思路:将树不断地划分成两块——>以划分点作为“中间点”(我们称为重心),统计该点周围点到该点的距离ds[],统计ds[]+ds[]小于等于k的对数——>回归上层继续计算总结来说就是:划分原创 2016-03-02 10:07:43 · 504 阅读 · 0 评论 -
[HDU 4046]Panda[线段树]
题目链接:[HDU 4046]Panda[线段树]题意分析:在一个长度为n的只包含b和w的字符串中,给出m个操作,0操作改某位为b或者w中的一个字符,1操作查询区间[L,R]内有多少个wbw解题思路:sum[i]代表前到第i个字符为止所拥有的wbw的个数,a[]用来存储线段树结点值,也就是sum[]值。整道题就是线段树区间更新和单点查询。个人感受:想到用sum来存储,然后推原创 2016-03-06 10:40:22 · 488 阅读 · 0 评论 -
[POJ 3007]Organize Your Train part II[Hash][Trie]
题目链接:[POJ 3007]Organize Your Train part II[Hash][Trie]题意分析:将字符串任意分割两半。可进行下列操作:1.互换两半的位置;2.将其中一个反转。每次操作次数不限。问:给出的字符串,一共能产生多少个不同的字符串?解题思路:搞搞搞~先看看分成两半都有什么情况,发现总共有八种组合,我们用s串记录没有前后交换过位置的字符串,t串记录交原创 2016-03-11 22:33:14 · 513 阅读 · 0 评论 -
[UVA548]Tree[根据中序后序构建树][UVA536]Tree Recovery[根据前序中序构建树]
题目链接:[UVA548]Tree[根据中序后序构建树]题意分析:给出树的中序后序,节点编号等于节点的权值,问:那个叶子到根节点的权值和最小,输出号码最小的那个叶子解题思路:把树建立起来,然后从根节点开始向下进行求和操作,每个节点的权值和等于当前权值加上父节点权值和。个人感受:人生第一道建树题TAT参考了别人的代码,算是略理解了。感觉树是个神奇的东西。然后是这道题:[UVA536]原创 2015-07-24 19:18:39 · 736 阅读 · 0 评论 -
[UVA 11235]Frequent values[线段树区间查询]
题目链接:[UVA 11235]Frequent values[线段树区间查询] 题意分析: 查询区间中出现次数最多的数出现的次数。给出的数列是从小到大排序的。 解题思路: 因为是排好序的,所以同样的数是连在一起的,线段树区间查询即可。lsum[]记录以这个区间左边开始最长的连续长度,rsum[]表示以这个区间右边开始最长的连续长度。sum[]代表区间中最长的连续长度。 个人感受: 久不原创 2015-11-01 23:01:35 · 614 阅读 · 0 评论 -
[HDU 2795]Billboard[线段树]
题目链接:[HDU 2795]Billboard[线段树]题意分析:有一个高度为h,宽度为w的广告板,给出n个海报,每个海报高度1,宽度x。问能否贴到广告板上,能输出贴到的行,否则输出-1。每张海报必须贴到能贴部分的最左上角。解题思路:用线段树区间存:区间中还能贴的最大宽度;每次查询整个区间,满足就继续,否则返回,当l == r时说明查询到了最满足的行,然后进行更新。个人感受:原创 2015-10-01 00:38:32 · 402 阅读 · 0 评论 -
[POJ 1308]Is It A Tree?[并查集][判断有向树]
题目链接:[POJ 1308]Is It A Tree?[并查集]题意分析:判断给出的有向图是不是一颗树。解题思路:嘛,首先得看看题目是怎么给树定义的。一、树是n(n>=0)个结点的有限集二、树没有环三、是树,不是森林四、有且仅有一个结点的入度为0五、除树根外,结点入度为1对于条件二,当某条边的左右两端点都属于一个集合时,就存在环了。对于条件三,当某个结原创 2015-08-28 07:17:09 · 1010 阅读 · 0 评论 -
[HDU 1166]敌兵布阵[树状数组][入门]
题目链接:[HDU 1166]敌兵布阵[树状数组][入门]题意分析:查询区间敌兵数。解题思路:模板题啦,可以用各种方法过。这里当做树状数组入门。推荐一篇博文来入门:http://blog.youkuaiyun.com/pi9nc/article/details/8779483#t1 博文的第二部分就是关于树状数组的。个人感受:整个树状数组我觉得最需要抓住的是sum数组是存储着什原创 2015-09-14 23:56:48 · 618 阅读 · 0 评论 -
[POJ 3264]Balanced Lineup[树状数组查询区间最大最小值]
题目链接:[POJ 3264]Balanced Lineup[树状数组查询区间最大最小值]题意分析:查询每个区间的最大值与最小值只差。解题思路:用树状数组查询。具体见博文:[HDU 1754]I Hate It[树状数组查询+更新区间最大值]只是多了个查询最小值。没啥区别。个人感受:对最大值最小值的查询还是没掌握牢固,多瞅瞅。具体代码如下:#include#i原创 2015-09-15 23:38:13 · 2441 阅读 · 0 评论 -
[POJ 3468]A Simple Problem with Integers[树状数组区间更新+求和]
题目链接:[POJ 3468]A Simple Problem with Integers[树状数组区间更新+求和]题意分析:对特定的连续区间进行更新值并求出特定区间的和。解题思路:使用树状数组进行区间更新,最主要的思想就是将区间的改变量保存下来。详细解答戳这里:http://kenby.iteye.com/blog/962159说一说对最终 ans[x] = segma(原创 2015-09-16 19:33:59 · 515 阅读 · 0 评论 -
[HDU 4031]Attack[树状数组区间更新单点查询]
题目链接:[HDU 4031]Attack[树状数组区间更新单点查询]题意分析:『基地』组织又要打美国啦,如今他使用一种武器,可以攻打一个范围内的目标。但是米国有护盾,每个连续段内都有护盾,可以抵挡一次攻击。但是护盾有CD,一次之后要过t时间才能回复,然而恐怖分子的没有CD,果然反派都是流弊XD。给出多个攻击和查询,每次查询输出该点被成功攻击了几次。解题思路:成功攻击次数怎么计原创 2015-09-17 18:06:17 · 625 阅读 · 0 评论 -
[HDU 1698]Just a Hook[线段树区间更新]
题目链接:[HDU 1698]Just a Hook[线段树区间更新]题意分析:屠夫的钩子被分割成n个节,每节初始时都有铜制,铜制每节价值为1.然后给出q个操作,改变段l,r的材料为其它材料。最终询问:此时钩子的总价值是多少?解题思路:线段树的区间更新。使用到了lazy思想,也就是代码中的add数组。整个原理就是,更新的时候,当某段被包含在被更新区间内时,只需给该段标记一下改变原创 2015-09-22 17:05:10 · 628 阅读 · 0 评论 -
[HDU 5444]Elven Postman[nlogn建树][BST]
题目链接:[HDU 5444]Elven Postman[nlogn建树]题意分析:邮递员要给住在树上的房间送信,房间的安排规律是小的在东,大的在西,查询房间,输出邮递员要走的路径。解题思路:根据房间分布规则,在建树的同时把到达这房间的路径记录下来。这里用了set来建树,初始时放入根结点。根据房间分布规则,如果查询到的房间都不在set中,说明是目前房间都大的,那么把它加入到当前原创 2015-10-11 10:44:53 · 561 阅读 · 0 评论 -
[HDU 1754]I Hate It[树状数组查询+更新区间最大值]
题目链接:[HDU 1754]I Hate It[树状数组查询+更新区间最大值]题意分析:查询区间最大值+更新区间最大值。解题思路:自己做主把代码改得自己好理解点了XD具体见代码注释个人感受:嘛,一步步来,先啃了树状数组先。具体代码如下:#include#includeusing namespace std;const int MAXN = 2e5 + 11原创 2015-09-15 17:22:14 · 1818 阅读 · 0 评论 -
[HDU 1394]Minimum Inversion Number[逆序对][线段树]
题目链接:[HDU 1394]Minimum Inversion Number[逆序对][线段树]题意分析:实质上来说,这道题就是求n个小于n的数的排列变成环之后,从其中某一点切开的最小逆序对数。解题思路:第一步:求出初始逆序对数。可以用归并排序,这里我用了线段树。能使用线段树的理由:线段树存储的是一个区间段的值,应用到求逆序对数,我们就可以让它初始时都为0,每次加入一个数x前原创 2015-09-24 01:18:55 · 756 阅读 · 0 评论 -
[POJ 1470]Closest Common Ancestors[离线LCA]
题目链接:[POJ 1470]Closest Common Ancestors[离线LCA]题意分析:给出多个查询,查询点u和v的最近公共祖先。输出每个点作为最近公共祖先在查询中出现的次数,0次的不输出。解题思路:离线LCA,需要用到tarjan。和普通的tarjan差不多。多了两样东西:1.u - > v回溯的时候,更新v的祖先为u2.在递归结尾,检查查询。个人感原创 2016-04-10 00:22:34 · 622 阅读 · 0 评论