摘要:
树上LIS:树上找一条简单路径的子序列使点权严格单增,最大化长度。 原题数据过小,用线段树合并可以做到$O(n\log n)$。 每个点用一棵线段树维护以每个权值为结尾的LIS最长长度,线段树合并时更新子序列不包含当前点时的最大值,再线段树上区间询问得到包含时的最大值并更新线段树。 阅读全文
摘要:
https://blog.sengxian.com/solutions/bzoj-2877 注意二维线段树的upd()也是一个O(log n)的函数(pushdown()应该也是但没写过)。 阅读全文
摘要:
设sm为所有p之和,套路地对每道菜建一个点,将每个厨师拆成sm个点,做的倒数第i道菜的代价为time*i。 S向每道菜连边<0,p[i]>(前者为代价后者为流量),i菜到j厨师的第k个点连<v[i][j]*k,1>,厨师到T连<0,1>。 但图太大了,于是动态加点。当厨师的第i个点被流完后再建第i+ 阅读全文
摘要:
https://www.cnblogs.com/MashiroSky/p/6576398.html 阅读全文
摘要:
https://www.cnblogs.com/GXZlegend/p/8611948.html 阅读全文
摘要:
固定一种构造方法,使它能够构造出所有可能的序列。 对于一个要构造的序列,把所有点排成一串,若a[i]=a[i-1],那么从1所在弱连通块往连通块后一个点连,若所有点都在一个连通块里了,就在1所在强连通块中随便连。若a[i]<a[i-1],那么连一条从后往前的边让若干点与1所在强连通快合并。显然这样可 阅读全文
摘要:
一个非常基础的问题,建出表达式树后在树上DP即可。预处理时记录每个位置之前每种符号最近的出现位置可以做到线性,这里直接写了$O(n^2)$算法。 注意减法和除法不满足交换律所以要取最右边的一个作为当前子树的根,而乘方要取最左边的。以及注意区分减号和负号。 阅读全文
摘要:
FHQ Treap,又称无旋treap,一种不基于旋转机制的平衡树,可支持所有有旋treap、splay等能支持的操作(只有在LCT中会比splay复杂度多一个log)。最重要的是,它是OI中唯一一种支持可持久化的平衡树。 以下只提供题表与代码,不提供教程。 1.[BZOJ3224]普通平衡树 FH 阅读全文
摘要:
学可持久化treap的时候才发现自己竟然没写过需要标记下传的主席树,然而现在发现大部分操作都可以标记永久化,下传会增大占用空间。 这题一种写法是和普通的线段树一样标记下传,注意所有修改操作(包括put())都要新建点。于是MLE了。 1 #include<cstdio> 2 #include<alg 阅读全文
摘要:
长链剖分,类似于重链剖分(dsu on tree)的一种替代算法。最广泛的用法是优化与深度有关的树上DP,以及处理一些与点分治类似的问题。有一部分长链剖分题也可以用dsu on tree做,单复杂度往往会多一个log。 每个点找到高度最大的儿子作为自己的重儿子,连续的重儿子形成重链。可以发现,一个点 阅读全文