11 2021 档案
摘要:传送门 解题思路 直接用洛谷题解! 说的好! 怎么求有向图的欧拉路径呢? 如果有起点,从起点出发,然后不断dfs,对每个点记录其出边已经到了哪一条,然后当一个点的出边都遍历完的时候就把这条边加入栈中。 这样就找到了一条合法的欧拉路径。 可以使用当前弧优化,时间优化到O(n+m)。 这个题因为要求字典
阅读全文
摘要:传送门 解题思路 若干平衡树,每次操作有两种,一是合并两个Splay,二是查询某一个点所在的平衡树里的第k小的点的编号。 首先用并查集维护某个点在哪个平衡树里,然后rt[i]记录编号为i的平衡树的根。 每次合并时启发式合并,直接把小的树的每个点暴力insert到大树里。 查询正常操作即可。 为了方便
阅读全文
摘要:传送门 解题思路 若强制在线,可以考虑用树剖+主席树,相当于每次询问两个点之间的路径上在 时刻之前开始搜集情报的人数。 但是这题可以离线,于是可以把询问按照 离线一下,就可以用线段树/树状数组来维护了。 注意一定要区分原编号和dfn编号。 时间复杂度:\(O(
阅读全文
摘要:传送门 解题思路 平衡树板子题。 每次所有的数加或减可以O(1)加或减限制,然后删除掉小于当前限制的点,统计答案。 加点时把原权值减去sum然后扔到Splay中,询问第k大时也要把查询的答案加上一个sum。 AC代码 #include<iostream> #include<cstdio> #incl
阅读全文
摘要:传送门 解题思路 首先考虑无解的情况: 首尾距离 第一个石头到 的距离 或第二个石头到 的距离 存在一个 判断完无解的情况,考虑构造答案。 最简单的方法是过去的时候跳1,3,5,7,9,……
阅读全文
摘要:传送门 解题思路 先二分答案,然后做一个在树上从叶子节点向上的贪心,让每个叶子尽可能取满。 当然也可以直接树形dp,O(n)。 注意如果WA on test 5,说明爆long long了,因为二分mid可以达到1e14,然后贪心过程中累加可能爆掉。 这时候设置一个inf,如果当前sum>inf,s
阅读全文
摘要:传送门 解题思路 非常好的一道题。 一开始错误的认为对于一个确定的左端点,合法的区间一定是右面的一个前缀。 但事实上并不是。 因为区间[k+1,2k]的起点不确定,所以不满足单调性。 所以正确的解法是先看区间[1,k],找到最大的k(因为这个区间满足单调性),然后回滚,看看最大k是多少可以使[k+1
阅读全文
摘要:传送门 解题思路 用平衡树维护摧毁的房屋。 摧毁等于insert,修复等于delete,询问等于查询前驱后继。 为了方便先扔进一个0点和n+1点。 注意查询时先进行判断当前房屋是否已经摧毁。 AC代码 #include<iostream> #include<cstdio> #include<cstr
阅读全文
摘要:传送门 解题思路 Splay如何维护序列呢? 以序列下标作为val值,扔到Splay中。 因为有区间翻转操作,所以实际上并不能保证绝对的按照val值排序,也就是说Splay的中序遍历结果是真正的序列,而val值对应的是当前序列的每个元素原来的位置。 与普通的Splay的区别在于多了一个区间翻转操作,
阅读全文
摘要:传送门 Splay 细节是真他妈多,写了一天,写吐了。 后悔没先学treap了。 需要实现以下函数: void Init():重置整棵树(删除了整棵树的时候用) int New(int val,int fa):新建一个节点,权值为val,父亲为fa,返回节点编号 void Delete(int x)
阅读全文
摘要:任何一个ICG(公平组合游戏)都可以转化成一个有向图移动问题,从而使用SG函数求解。 SG函数的定义为:SG(u)=mex{SG(v)}。 mex表示集合中第一个未出现的数字。 SG函数可以用类似拓扑序的方式,从最终状态一步步向前推。 最后若起点的SG函数值不为0,则先手必胜。 若多张图多个起点?
阅读全文
摘要:点分治 采用分治思想。对树上路径问题进行查询时,把路径分成两部分,一部分是经过根节点的路径,一部分是不经过根节点的路径。 而在处理不经过根节点的路径时,可以才有分治思想,递归到左右子树进行求解。 这样复杂度是 的,但是若我们每次选取的根节点都是要求解的子树的重心,则复杂度可以优
阅读全文