题意:
给定n个城市,和一些道路,道路有两种,一种是石头路,还有一种是乡村路,石头路形成了一棵树,即两两城市都可达,乡村路的加入使所有的石头路都处于一个或多个环中,即任意石头路被破坏后,城市间依然可以通过乡村路连通,现在敌国可以破坏一条石头路和一条乡村路,问,有多少种破坏方案,可以使破坏后,至少有一对城市不能互相到达。
题解:
仔细想想可以发现,石头路形成了一棵树,当这棵树上某一段道路被乡村...
分类:
其他好文 时间:
2014-11-01 14:56:40
阅读次数:
227
Query on a treeTime Limit:5000msMemory Limit:262144KBThis problem will be judged on SPOJ. Original ID:QTREE64-bit integer IO format:%lld Java class na...
分类:
其他好文 时间:
2014-11-01 14:47:17
阅读次数:
182
题目链接:hdu 4757 Tree
题目大意:给定一棵树,每个节点有一个值,现在有Q次询问,每次询问u到v路径上节点值与w亦或值的最大值。
解题思路:刚开始以为是树链剖分,其实树链剖分只是用来求LCA(可以不用树链剖分)。
可持久化字典树,在每次插入的同时,不修改原先的节点,而是对所有修改的节点复制一个新的节点,并且在新的节点
上做操作,这样做的目的是能够获取某次修改...
分类:
其他好文 时间:
2014-10-30 19:12:51
阅读次数:
393
题目大意:给出一颗无根树,有链的修改操作,还有子树的查询。除此之外,还有选定这棵树的一个点为根。
思路:子树操作,链上修改,带size域的树链剖分就可以搞定。换根肯定不能真的换,出题人要是闲的没事所有操作都在换根就惨。我们可以画一张图模拟下换根。先按照读入的顺序建一颗有根树,然后观察当前的根在要询问的点的位置。如果当前的根在要询问的点的儿子中,那么那个点为根的时候,当前点的子树就是除了当...
分类:
其他好文 时间:
2014-10-30 17:13:46
阅读次数:
226
树链剖分
1036: [ZJOI2008]树的统计Count
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 5596 Solved: 2347
[Submit][Status]
Description
一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. C...
分类:
其他好文 时间:
2014-10-29 00:20:12
阅读次数:
392
最开始看动态树不知道找了多少资料,总感觉不能完全理解。但其实理解了就是那么一回事。。。动态树在某种意思上来说跟树链剖分很相似,都是为了解决序列问题,树链剖分由于树的形态是不变的,所以可以通过预处理节点间的关系,将树转化成连续的区间,再加以其它的数据结构,便能以较快的速度处理序列的修改和查询。 ...
分类:
其他好文 时间:
2014-10-28 13:42:53
阅读次数:
292
最近在强化知识点深度,发现树链剖分不是很会写了。
回顾一下修改操作:
若两个点在同一条链上,则直接修改这段区间。
若不在同一条链上,修改深度较大的点到其链顶端的区间,同时将这个点变为他所在链顶端的父亲,循环操作直到这两个点在同一条链上,就可以用上一种方法了。
没有用LCA写是因为以前被坑过,不但没有这种方法好写,效率也不太让人满意。
主要是对第二种情况如何写有所遗忘,写道模版再给自己提个...
分类:
其他好文 时间:
2014-10-26 17:00:56
阅读次数:
214
点更新树链剖分入门题,诶 错了好多发,提到同一点时没更新,边数组开小了一倍。#include #include #include #include using namespace std;#define lson l,mid,rt size[son[x]]) son[x] = cc; }}vo...
分类:
其他好文 时间:
2014-10-25 17:08:02
阅读次数:
163
题目大意:给出一棵树,每一个节点有一个权值,一开始所有节点的权值都是0。有两种操作,0 x y代表以x为根节点的子树上所有点的权值增加y。1 k a1 b1 a2 b2 ……ak bk代表询问。一共有k条边( k
思路:子树修改,区间查询,很明显用树链剖分解决,树链剖分维护一个size域,那么x的子树的范围就是pos[x]到pos[x] + size[x] - 1这一段上,可以用线段树...
分类:
其他好文 时间:
2014-10-25 09:19:42
阅读次数:
136
树链剖分是解决在树上进行插点问线,插线问点等一系列树上的问题
假如现在给你一棵树,然后没两条边之间有一条权值,有一些操作,1:x---y之间的最大权值是多少,2:改变x---y之间的权值
当前这样的操作有很多,如果直接用暴力的方法的话肯定不行,那么就要想一个好的方法,我们可以想一下能不能借助线段树解决,能不能想一种方法对树上的边进行编号,然后就变成区间了。那么我们就可以在线段树上进行操作了...
分类:
其他好文 时间:
2014-10-23 17:48:23
阅读次数:
285