LCT
samjia2000
I swear...
We are INFINITE.
展开
-
LCT(Link Cut Tree)学习小记
动态树(Dynamic Tree) 之前我一直以为这是一种数据结构,最近才明白这是指一类问题。在学习LCT之前首先要学习树链剖分。 树链剖分就是将一棵树划分成若干条链,用数据结构去维护每条链,复杂度为O(logN)。树链剖分针对的是树的形状不会变的树,但是如果树的形状是会变的(即要支持将树分离、合并的操作),就需要用到LCT(Link Cut Tree)了。LCT大概思路就是用splay去维护每原创 2016-01-15 21:04:41 · 899 阅读 · 0 评论 -
[Hnoi2010]Bounce 弹飞绵羊
题目大意从左到右有n个位置,在第i个位置会被弹到第i+a[i]个位置,超出范围则挂掉,有q个操作,一种是更改某一位置上的a[i],一种是询问第i个位置什么时候会挂掉分块设f(i)为i在其块内最少跳多少次会跳出这个块,而g(i)表示他跳出块后会跳到哪个点,于是修改时我们可以重构块,询问时就一个一个块跳。时间复杂度O(nn√)O(n\sqrt n)LCT很容易发现,如果我们把跳出去都记为跳到n+1,那么原创 2016-06-30 15:30:59 · 363 阅读 · 0 评论 -
【GDOI2017第四轮模拟day2】绝版题
题目大意对于一棵树,q个操作可以新增节点或改变一个点的权值,或询问整棵树的带权重心,强制在线 1≤q≤3×1051\le q\le 3\times 10^5题解考虑如何找带权重心,显然是每次往最大权的子树走,条件是这个子树的权×2大于整棵树的权值和。 那么就很明显了,我们要做的是维护以每个点为根的子树的权值和,以及每个点的儿子中的最大权。 由于一条链上的信息更改会影响很多点,那么我们可以用LC原创 2017-04-25 22:17:21 · 517 阅读 · 0 评论 -
【NOI2017模拟6.22】没有上司的舞会
题目大意只有加点操作,动态维护树的最大独立集题解考虑LCT,对于一个点x,s[x][0/1]表示x选或不选时不与他在同一条链上的儿子的DP值,f[x][0/1][0/1]表示splay中x维护的这一个区间最左端选或不选以及最右端选或不选的DP值,只要在切掉splay的边或连接时维护s就好了代码#include<iostream>#include<cstring>#include<cstdio>原创 2017-06-22 22:36:44 · 750 阅读 · 0 评论