首页 > TAG信息列表 > Bjoi2014
[BJOI2014]大融合
嘟嘟嘟 好久没写LCT,真的忘了好多。 这道题是用lct维护子树大小。 众所周知,最基础的lct只能维护树链上的信息,而因为虚实边的划分导致不能直接维护子树信息。 所以对于每一个点,我们多维护一个变量\(si\),在这道题就表示这个点在原树上所有虚儿子的子树大小之和。 为了防止弄混,我用\(BJOI2014 大融合
保证初始所有点都孤立 保证连的边的端点在连这条边前不联通 即整个图一直都是森林。 先连好所有的边,定好每棵树的根。 这样,每次询问就是在树上的一条边 (fa[x], x), 答案是边两边连通块 size 的乘积。 fa[x] 那边的大小不好办, x 这边的正好是一个子树型的询问, 连通块总的 size 可BJOI2014 大融合
BJOI2014 大融合 LCT维护子树 这题要维护的是子树的大小,动态加边,用LCT维护 设\(sz_i\) 表示虚儿子的大小之和,\(sum_i\) 表示子树大小 考虑\(sz\)什么时候会变 access中,只有一个儿子由虚变实,有一个儿子由实变虚,加减一下就好了 link之后连了虚儿子,需要更新,注意这个时候两个点都必须Luogu4219 [BJOI2014]大融合
Link Solution 求两端点的子树大小然后相乘。 可以想到直接断边然后两边都\(makeroot\)一下。答案就是根节点的\(size\)。 但是怎么维护\(size\)呢?实子树大小可以直接由两个实儿子得到。但是虚子树不行。所以可以对每个点多维护一个\(sv[]\),表示这个节点的虚子树大小总和。 那么\(bzoj 4530: [Bjoi2014]大融合【LCT】
新姿势,一般来讲LCT只能维护splay重边里的数据,而这里要求维护整颗子树的size 多维护一个sq表示当前点轻儿子的size和,si表示包括轻重边的整颗子树的大小 然后需要改sq的地方是link和access,link是因为给y下面挂了个连着虚边的x点,所以给y的sq加上x的size;acc是改变了splay的结构,把一条实P4219 [BJOI2014]大融合(LCT)
P4219 [BJOI2014]大融合 对于每个询问$(u,v)$所求的是 ($u$的虚边子树大小+1)*($v$的虚边子树大小+1) 于是我们再开个$si[i]$数组表示$i$的虚边子树大小,维护一下就好辣 #include<iostream>#include<cstdio>#include<cstring>using namespace std;inline void Swap(int &a,int &b){a^=b