题外话首先这是个挺裸的题,由于太久没写剖分导致调了好久,前天调了一下午,一直查不到错昨晚在看春晚的时候突然灵机一动,发现合并的时候出了问题,开电脑把它A掉了= =感觉自己也蛮拼的Description给定一棵有n个节点的无根树和m个操作,操作有2类:给定一棵有n个节点的无根树和m个操作,操作有2类:1:将节点a到节点b路径上所有点都染成颜色c1:将节点a到节点b路径上所有点都染成颜色c2:询问节点a...
分类:
其他好文 时间:
2015-02-19 16:21:25
阅读次数:
282
这道题很久以前用树链剖分写的,最近在学LCT ,就用LCT再写了一遍,也有一些收获。因为这道题点权可以是负数,所以在update时就要注意一下,因为平时我的0节点表示空,它的点权为0,这样可以处理点权为非负求最大值和求和的情况(即不用特判某个点是否有左右儿子,直接更新就行了),但这道题就不行(求和要...
分类:
其他好文 时间:
2015-02-14 21:19:25
阅读次数:
187
这道题是树链剖分的裸题,正在学LCT,用LCT写了,发现LCT代码比树链剖分还短点(但我的LCT跑极限数据用的时间大概是kuangbin大神的树链剖分的1.6倍,所以在spoj上是850ms卡过的)。收获: 1、边转换成点(即若存在边(u,v),则新加一个点z代表边,将z连接u和v,z的点权就是(....
分类:
其他好文 时间:
2015-02-13 21:11:22
阅读次数:
291
让我们先来看如下一个问题:
给定一棵n个节点的树,有如下两种操作:
1.修改树上一条边权值为v
2.查询树上两个节点间路径的距离
对于这个问题我们要怎么做?
暴力?妥妥的超时。
这样我们就引入了树链剖分的算法。
在上述题目中,虽然树的边权发生了改变,但是树的形态是没有发生任何变化的。因此我们可以将树上的链取下来存入数据结构中(线段树平衡树均可)利用这些数据结构的优越性能来实现权值的修改...
分类:
其他好文 时间:
2015-02-13 13:24:20
阅读次数:
181
先让我们看一个题目
有一棵n个节点的树,树的每条边有个边权,有如下两种操作
1.修改一条边的边权
2.查询两点之间路径的权值
对于这种题目,可能有人会选择直接暴力,这很明显不行。
换一种思路,如果我们把树的每一条边拆下来,对他们进行编号,然后使用线段树来存储呢?使用线段树来对每条边的边权进行修改和查询是很方便的。于是这样我们就引出了树链剖分。
树链剖分其实就是把一棵树上的各个边拆开来进行...
分类:
其他好文 时间:
2015-02-12 00:50:00
阅读次数:
506
题目链接:POJ 2763 Housewife Wind
题意:抽象出来就是 一棵已知节点之间的边权,两个操作,1·修改边权,2·询问两个节点之间的边权和。
AC代码:
#include
#include
#include
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<...
题目大意:维护一棵有根树,每个节点初始权值为0,支持下列操作:
1.链上+
2.子树求和
。。。。。链剖裸题- -
果然链剖这种东西想要1A实在是不咋现实- -
#include
#include
#include
#include
#define M 100100
using namespace std;
struct Segtree{
Segtree *ls,*rs;
l...
分类:
其他好文 时间:
2015-02-04 14:49:21
阅读次数:
143
#include
#include
#include
using namespace std;
const int maxn = 10010;
struct edge
{
int v, next;
}e[maxn*2];
int first[maxn], cnt;
int top[maxn], dep[maxn], sz[maxn], f[maxn], son[maxn], rank[m...
分类:
其他好文 时间:
2015-02-02 14:10:08
阅读次数:
107