树
Freopen
这个作者很懒,什么都没留下…
展开
-
支配树学习笔记
博客1博客2好了上面两篇博客应该是全网关于支配树最重要的博客了。接下来就是定一个小目标,把模板缩到20行。显然不行注意:这个模板对多组数据不友好,对图不联通可以求,但是注意有些坑。Code\mathcal CodeCode#include<bits/stdc++.h>#define maxn 300005#define maxm 300005#define rep(i,j,k) for(int i=(j),LIM=(k);i<=LIM;i++)#define per(原创 2020-06-15 21:28:43 · 193 阅读 · 0 评论 -
SDOI2017 树点涂色(LCT维护到根颜色段)
题目#include<bits/stdc++.h>#define maxn 100005#define lc u<<1#define rc u<<1|1using namespace std;int n,m;int info[maxn],Prev[maxn<<1],to[maxn<<1],cnt_e;void Node...原创 2020-04-29 11:54:45 · 186 阅读 · 0 评论 -
LOJ #2206. 「HNOI2014」世界树(虚数,长链剖分O(1)求k级祖先)
题目虚树显然,一次从下到上dpdpdp求子树内能到该点的最优的临时议事处。一次从上到下dpdpdp求子树外能到点uuu的父亲的最优的临时议事处。然后两个加一下除个二,树上找kkk级祖先即可。长链剖分O(1)O(1)O(1)求kkk级祖先:先O(nlogn)O(n\log n )O(nlogn)预处理所有点的2j2^j2j级祖先。再对于每个长链链头,处理链头向上长链长度级的父亲数组...原创 2020-01-04 08:21:00 · 327 阅读 · 0 评论 -
CF280C Game on Tree(期望的线性性)
题目给出一棵树,每次随机等概率选择一未染黑的点,将它及其子树染黑。问期望多少次操作可以将树全部染黑。n<=1e5n<=1e5n<=1e5期望操作次数 -> 每个点的期望操作次数之和 -> 每个点被操作的概率之和 -> ∑i1depi\sum_{i} \frac 1{dep_i}∑idepi1我真的没有在水博客。AC Code\rm AC...原创 2019-12-13 17:30:02 · 116 阅读 · 0 评论 -
[SCOI2015]国旗计划(可能是倍增)
题目这个题要是真的打倍增就是思维僵化,莫得洗白。如果把每个[li,ri][l_i,r_i][li,ri],对于ri>=lj and li<ljr_i >= l_j \ and \ l_i < l_jri>=lj and li<lj并且在此基础上满足rjr_jrj最大的jjj的(i,j)(i,j)(i,j)...原创 2019-10-25 13:39:29 · 196 阅读 · 0 评论 -
BZOJ 3162 独钓寒江雪(树同构计数)
给定一棵无根树,求其中本质不同的独立集的个数。无根树同构。转化成以重心为根的有根树,如果重心有两个,就在这两个重心之间插入一个点与这两个重心连边,这个点作为新的重心。然后就成了有根树同构过程树形DP。这个DP非常naive就不介绍了。如果子树有kkk个同构,他们的方案数都是ppp那么我们要本质不同的方案分配,可以想到令给子树分配方案的编号不递减,那么就是每分配给前一个子树一个方案,就要...原创 2019-10-14 13:29:34 · 256 阅读 · 0 评论 -
BZOJ 2527: [Poi2011]Meteors
题目首先卡我主席树内存就不说了。老早就看见讨论版说会炸long long我就想着把每一次加减都和1e9取个min.。。。。。。。木大木大木大木大木大!!!!!!!!!!!没有减是可以的。但是用树状数组就有减。所以不行。#include<bits/stdc++.h>#define maxn 1000005#define inf 0x3f3f3f3f#define ...原创 2019-03-21 11:56:37 · 121 阅读 · 0 评论 -
51nod 2014 小朋友的笑话(势能分析线段树)
小O是一个很萌很萌的女孩子。有一天小O叫了很多很多萌萌哒小朋友到家里来玩。由于太无聊了,她们开始讲笑话。总共有N个小朋友排成一排,编号1~N。在某个时刻,会有编号为xi的小朋友看到了笑话li,然后她会把这个笑话讲出来,与她距离不超过ki的小朋友都会听到这个笑话。当一个小朋友听到一个笑话时,如果她是第一次听得到这个笑话,那么她会觉得这个笑话非常好笑,笑的停不下来。如果她听到之前就是在笑的她...原创 2019-03-24 19:24:16 · 625 阅读 · 0 评论 -
LG P3267 [JLOI2016/SHOI2016]侦察守卫
题目这个题dpdpdp的状态和大概的方法很好想,但是在付诸实践时却有点。。。设fi,jf_{i,j}fi,j表示处理完iii为根的子树后,iii的子树内没被监视的点中深度最大的离iii的距离为jjjgi,jg_{i,j}gi,j表示处理完iii为根的子树后,还可以从iii往上监视jjj的距离。可以得到:gi,j=minu∈soni(gu,j+1+∑v∈soni and&nb...原创 2019-03-17 21:52:00 · 218 阅读 · 0 评论 -
UOJ#57./bzoj3051 【WC2013】(平面图转对偶图)
我极度推荐去Luogu交,完全不要管什么UOJ平面图转对偶图这个实现。。。太恶心了。1:其实从每条边开始走最左转线,是不会走到别的平面的边上的,第一次走到走过的边一定是开始的那条边。2:找最左转线的时候可以把每个点出发的边按极角排序,找下一条边就是找当前边的反向边的同出发点的极角更小的第一条边。3:因为平面图的边不会在中途相交,在中途我们可以用set维护斜率和截距(斜率为无限大的不需要考...原创 2019-03-13 16:52:03 · 258 阅读 · 0 评论 -
Treap
为了打紫荆花之恋被迫打了从来没打过的带旋转TreapTreap就是在维护val满足二叉搜索树的同时,维护prio(priority)满足堆的性质。通常Treap是用于做二叉搜索树,因为随机取prio可以使树的深度满足随机时的期望O(logn)O(\log n)O(logn)而不吃数据。维护二叉搜索树只需要像BST一样就行。维护Heap性质可以用旋转。就是将一个点的一个儿子放在它自己的位...原创 2019-03-22 16:02:19 · 141 阅读 · 0 评论 -
LG P4331 [BOI2004]Sequence 数字序列(左偏树+贪心)
题目论文题。好难啊。我们先考虑b数组不下降。那么一定是一整条一整条的递增。。。。。。现在如果前半段和后半段的最优决策如此:那么整段的最优决策也就这样了。但是如果是这样的:那么不能直接合并。首先可以证明,整个的最优策略中,左边还是一条直线,右边也是。然后可以证明,这两条直线应该是一个高度(左边的想往上,右边的想往下,合在一起)。然后可以发现,这个高度就是中位数的高度。。。...原创 2019-03-23 12:08:49 · 185 阅读 · 0 评论 -
LOJ #2562. 「SDOI2018」战略游戏(圆方树)
题目这个题还是近乎板子题吧。tarjan求点双连通分量 , 建圆方树,路径上的圆点为必须经过的点。那么答案就是点集中任意两点间的圆点数量,也就是在虚树上或虚树的边上的圆点数 - 虚树上的圆点数。设点集为S,答案为按dfs序排序后:dis(S1,S2)+dis(S2,S3)...+dis(Sk,S1)2−∣S∣\frac {dis(S1,S2)+dis(S2,S3)...+dis(Sk,S...原创 2019-05-22 16:19:48 · 216 阅读 · 0 评论 -
有先后限制的一类贪心问题
LOJ#2509. 「AHOI / HNOI2018」排列这个题实质上是一棵树上满足父亲比儿子先选,第i个选的点xxx的有i∗w[x]i*w[x]i∗w[x]的贡献,求最大贡献。可以发现w[x]w[x]w[x]最小的应该尽可能先的被选。于是我们考虑将最小的点xxx和faxfa_xfax缩为一个点。然后我们考虑到缩为一个点之后的新www是一个问题。考虑两个没有限制的树的先后选关系,缩为两...原创 2019-07-07 19:23:52 · 225 阅读 · 0 评论 -
析合树
给你们一个LCA的9K代码就溜:#include<bits/stdc++.h>using namespace std;const int MX=2000005,MXT=MX<<1,MXSEG=1<<20|1,inf=0x7fffffff;int n,q;int p[MX],a[MX];struct seg_t{ int ad; int m...原创 2019-07-10 16:15:59 · 1033 阅读 · 0 评论 -
小K与奇数
n个点m条边的无向图,求出一个大小为n2\frac n22n的匹配方案,两个点可以匹配当且仅当存在两个点在原图中的一条长度为偶数的路径,求一种方案使得所有匹配的路径不边相交但是可以点相交。n,m<=1e5n,m<=1e5n,m<=1e5这个题。。。发现当且仅当边数为偶数并且每个点的度数都为奇数的时候有解。如果我们不管路径长度为偶数这个条件,那么可以把1和2...原创 2019-08-04 18:47:27 · 207 阅读 · 0 评论 -
BZOJ 3251: 树上三角形
题目题解:这是一个判定性问题。>47>47>47个点就必定有解。可以通过较小两边之和<=第三边来证明。然后就暴力往上跳存下来暴力判断就行了。树剖AC Code:#include<bits/stdc++.h>#define maxn 400005#define pb push_back#define lc u<<1#...原创 2019-09-14 16:24:46 · 153 阅读 · 0 评论 -
长链剖分
终于填坑了呢长链剖分类似于每个点选最深的儿子作为重儿子的重链剖分。树边长度均为111的长链剖分有一些优美的性质。可以维护以深度为下标的DPDPDP例:Hotel加强版有一个树形结构,每条边的长度相同,任意两个节点可以相互到达。选3个点。两两距离相等。有多少种方案?这个题我们可以写出一个O(n2)O(n^2)O(n2)的DPDPDP。fi,jf_{i,j}fi,j表示iii子树内与i...原创 2019-10-10 13:47:22 · 151 阅读 · 0 评论 -
树的拓扑序列计数与同构
判断树同构 : 最小表示法 树是DAG(有向无环图)的一种, 求n个点的树的拓扑序列的个数? 考虑1~n的全排列,有n!个排列 设A子树的大小为size[A] 对于每个节点A , A在拓扑序列中要在其子树中所有其他点的后面,于是我们只考虑A的子树中的点的排列,发现只有1/size[A]的排列是符合上述要求的,又每个点的要求之间都无关(要求只是对当前点有关),所以符合所有要求的排列为...原创 2018-08-02 12:55:38 · 1667 阅读 · 0 评论 -
BZOJ 3772: 精神污染
兵库县位于日本列岛的中央位置,北临日本海,南面濑户内海直通太平洋,中央部位是森林和山地,与拥有关西机场的大阪府比邻而居,是关西地区面积最大的县,是集经济和文化于一体的一大地区,是日本西部门户,海陆空交通设施发达。濑户内海沿岸气候温暖,多晴天,有日本少见的贸易良港神户港所在的神户市和曾是豪族城邑“城下町”的姬路市等大城市,还有以疗养地而闻名的六甲山地等。兵库县官方也大力发展旅游,为了方便,他们在县...原创 2019-03-21 10:58:54 · 229 阅读 · 0 评论 -
BZOJ 4009: [HNOI2015]接水果(整体二分套二维偏序)
题目表示这种题好套路啊。原题如果注意到一条路径包含另一条路径,那么在dfs序上第一条路径的端点与第二条路径的端点是有一个偏序关系的。然后就变成了二分答案+三维偏序。因为可以离线,将二分答案和一维整合起来变成整体二分O(nlogn)O(n\log n)O(nlogn)。剩下两维就是一个二维偏序,排序后树状数组维护O(logn)O(\log n)O(logn)。一共O(nlog2n...原创 2019-03-20 22:25:01 · 166 阅读 · 0 评论 -
LG P3345 [ZJOI2015]幻想乡战略游戏(树的带权重心 + 树链剖分+ 动态点分治)
题目首先这个题看起来这个最小值不好在动态点分治时维护。(居然)可以转化。最小值于树的带权重心处取到。带权带的是点权。树的带权重心是子树权∗2>=总树权子树权*2>=总树权子树权∗2>=总树权的点中最深的。不可能会有多个因为子树权∗2>=总树权子树权*2>=总树权子树权∗2>=总树权的点一定形成一条由根出发的链。那么就...原创 2019-03-20 12:34:30 · 384 阅读 · 0 评论 -
HDU 6405 Make ZYB Happy
题意:给出n(n&lt;=10000)个字符串S[1~n],每个S[i]有权值val[i],随机等概率造一个由小写字母构成的字符串T,Sum = 所有含有子串T的S[i]的val[i]之积,求Sum的期望值。 广义后缀自动机模板题。 广义后缀自动机 这个题比较特殊的地方在于,它不能打了标记后整个自动机同时沿fail链上传标记,必须边打标记边上传,因为出现多次答案只算一次。那么就有人提出了疑问...原创 2018-08-16 19:25:29 · 431 阅读 · 0 评论 -
基环树
基环树也叫环套树(明明更像树套环) 就是n个点n条边的连通图,可以发现只有一个环,并且删掉环上任意一个边可以变成一棵树。 尽管许多题解上都会说什么把环求出来然后分类讨论什么的, 但是,实际上删掉环上的一条边然后再加回去分类讨论要好做的多。。。。。 毕竟你不需要树上一个数据结构,再在环上再开一个数据结构。。。。。。。 套路了。...原创 2018-08-15 21:51:53 · 5766 阅读 · 0 评论 -
HDU 6356 Glad You Came
题意:给你一个函数,用这个函数得到m次区间取max的操作(减少输入),最后问每个点的值 点数n<=100000 , m<=5 * 1000000解法一:线段树打标记最后统一下放,复杂度O(mlogn + n),由于数据具有随机性,如果当前节点的标记大于现在要放的标记就不操作,O(实际可过)。 解法二:st表打标记最后统一下放,复杂度O(m + nlogn),注意到操作多节点少,...原创 2018-08-07 11:33:31 · 167 阅读 · 0 评论 -
HDU 6305 RMQ Similar Sequence
大致题意:给你一个串A,定义RMQ相似串为,对任意区间[L,R],两个串RMQ所在位置相同。告诉你B串中每个元素服从于[0,1]上相互独立的均匀分布。B的权值定义为,当B与A串RMQ相似时,权值为所有元素之和,否则为0。现在问你B串的期望权值是多少。 串A可以看做n个数对,这n个数对之间有偏序,可以看做一个排列,B中两个数相等的几率为0,也可以看做一个数列。 发现这就是要求这两个数列构造出的笛...原创 2018-08-02 14:05:30 · 288 阅读 · 0 评论 -
状态分块优化转移
如题:题目描述白兔有一颗n个点以1为根的树。树上每个结点有一个权值val。 如果两个点a,b满足a是b的祖先且val[b]|val[a],则白兔可以直接从a跳到b。 现在白云想知道,对于每一个点k,白兔从1号点跳若干步到达k号点的方案数是多少? 两个方案不同为它们经过的点数不同或者某一步到达了不同的点。n<=100000 , val <= 10^18很容易想到n^2的做法,但是数据范围...原创 2018-06-24 17:14:46 · 320 阅读 · 1 评论 -
BZOJ 4552: [Tjoi2016&Heoi2016]排序
Description在2016年,佳媛姐姐喜欢上了数字序列。因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他。这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行m次局部排序,排序分为两种:1:(0,l,r)表示将区间[l,r]的数字升序排序2:(1,l,r)表示将区间[l,r]的数字降序排序最后询问第q位置上的数字。Input输入数据的第一行为两...原创 2018-03-13 12:08:21 · 215 阅读 · 0 评论 -
替罪羊树SCT
照着指针版的打了个数组版的,发现自己上了一节C++语法课。重构什么的,最难在于找出深度最小的需要重构的节点,毕竟多写一个函数不太优雅,数组又不像指针那么方便直接修改。如果你要传回一个变量的地址(因为你直接修改这个地址ch等等就直接跟着改了,十分方便)函数不能写 int&得写int *...............删除还是不要重构,太浪费了。。。。。。#include<cstdio&g...原创 2018-03-12 19:57:50 · 220 阅读 · 0 评论 -
树上路径中位数的联想
1.枚举边。(树分治等等)2.注意如果将相等的确定一个偏序(就是说两条边就算边权相等你也要让他们之间一个小于另一个,使没有任意两个边相等)就可以用DP来计算而不用担心算重。。。。。。...原创 2018-03-09 22:53:13 · 291 阅读 · 0 评论 -
Codeforces1027F Session in BSU
全世界都在考基环树系列,一场CF考了两题基环树。。。。。。 AC Code:#include<cstdio>#include<cstring>#include<cctype>#include<vector>#include<cmath>#include<algorithm>#define maxn 200...原创 2018-08-19 19:36:03 · 326 阅读 · 0 评论 -
魏(2-sat)(前缀建边优化)
【题目描述】 魏国有n个城镇被分成了k个郡,有m条连接城镇的无向边。 曹操要求给每个郡选择一个城镇作为首都,满足每条边至少有一个端点是首都。 【输入格式】 第一行有三个整数,城镇数n(1<=n<=10^6),边数m(0<=m<=10^6),郡数k(1<=k<=n)。 接下来m行,每行有两个整数ai和bi(ai≠bi),表示有一条无向边连接城镇ai和bi...原创 2018-09-09 20:25:26 · 424 阅读 · 0 评论 -
BZOJ 2395: [Balkan 2011]Timeismoney
最小乘积生成树。sigma(Ai) * sigma(Bi) 最小。我们把每个生成树描述为一个点(sigma(Ai),sigma(Bi)),那么显然最小的sigma(Ai) * sigma(Bi)一定出现在凸包上又由于一些反比例函数的基本知识发现最小的乘积一定出现在凸包的顶点上,如果在边上,那么一定有一边在反比例函数的另一端。然后用Quickhall这个清新的算法求凸包,主要是因为点数太多才...原创 2018-10-19 16:55:09 · 171 阅读 · 0 评论 -
BZOJ 4026: dC Loves Number Theory(套路主席树)
题目发现就是区间乘积/∑pr出现在[l,r]的质因数中(pr−1)/pr\sum_{pr出现在[l,r]的质因数中}(pr-1)/pr∑pr出现在[l,r]的质因数中(pr−1)/pr关于出现过就加入这一条件。有一个套路:把每一个数yyy与他前面第一个和他相等的数xxx形成一个二元组(loc[x],loc[y])(loc[x],loc[y])(loc[x],loc[y]),第1个往0连。...原创 2019-03-19 21:51:14 · 195 阅读 · 0 评论 -
LCT进阶操作:子树查询
具体的思想就是,我们的LCT看似只能用Splay维护链上的信息,但是我们可以再开一个数组把虚儿子的信息加到点上(如果可加的话),那么一条链的总信息就是这条链及其下面的虚儿子的总和,就是这条链的链顶的子树和。如果我们access了一个点,那么这个点的所有虚儿子的和+他自己就是他的子树和(因为下面没有重儿子)。模板题注意需要维护虚儿子信息的只有access和link,因为access会执行到最上面...原创 2019-03-19 17:10:01 · 548 阅读 · 0 评论 -
NOI 2014 购票 (树上各种科技)
以前看着这个芳菲菲其弥章的题面以为这题又是什么数据结构神题。。。。。。其实就是 加点横坐标单调但查询斜率不单调的斜率优化 + 时间限制 + 树上查询。解法1(套路解法):因为时间限制,我们用线段树维护每个小区间的凸包,最后求个最小值就行。因为树上查询所以树链剖分。因为这些操作常数都不是很大,时间复杂度分析出来也没啥意思。。。。AC Code:#include<bits/stdc...原创 2019-03-06 20:12:57 · 589 阅读 · 0 评论 -
树上dsu
现在有一棵二叉树,所有非叶子节点都有两个孩子。在每个叶子节点上有一个权值(有n个叶子节点,满足这些权值为1…n的一个排列)。可以任意交换每个非叶子节点的左右孩子。 要求进行一系列交换,使得最终所有叶子节点的权值按照遍历序写出来,逆序对个数最少。n&lt;=200000这个题其实就是要求出每个非叶子节点的,左儿子中的一个叶子上的值大于右儿子中一个叶子的值,的对数。树上dsu就是一种启发式合并,...原创 2018-10-27 16:53:25 · 477 阅读 · 0 评论 -
树上骗分算法
当树上问题的求解复杂度和高度有关系,可以考虑缩链。。。毕竟没有几个出题人无聊到卡这种解法(不要透露给出题人)原创 2018-10-21 22:16:27 · 166 阅读 · 0 评论 -
K-D Tree
就是用一些的方法把平面按点分成若干块,方便你剪枝(这思路真暴力)因为是剪枝暴力,复杂度是O(能过),可以拿来干超级多的事情CQOI2016 : K远点对#include<cstdio>#include<cstring>#include<cctype>#include<algorithm>#include<queue>#incl...原创 2018-03-15 14:35:42 · 290 阅读 · 0 评论