摘要:
题目大意:给定一个长度为 N 的序列,支持两个操作:在序列末尾添加一个新的数字,查询序列区间 $[l,r]$ 内使得 $a_p\oplus a_{q+1}\oplus ... a_N\oplus x$ 值最大。 题解:由于是查询区间的最大异或值,可知应该使用可持久化数据结构,再由于是最大异或和,可知 阅读全文
摘要:
题目大意:给定一个 N 个点的外向树森林,点有点权。从该树中选出若干顶点组成一个集合,满足任意相邻的两个顶点不同时出现在该集合中,求这样集合中点权和的最大值为多少。 题解:与树相比,该题多了环这个结构。对于环上任意一条边来说,边的端点不可能同时被选取,因此,可以选择环上任意一条边,将其断开,答案不变 阅读全文
摘要:
题目大意:给定一个 N 个点,N 条边的无向图,现给每条边定向,求有多少种定向方式使得定向后的有向图中无环。 题解:显然,这是一个外向树森林,定向后存在环的情况只能发生在基环树中环的位置,环分成顺时针和逆时针两种情况,其他边方向随意。因此,记外向树森林中环的大小为 $w[i]$,则答案为$$2^{n 阅读全文
摘要:
同【普通平衡树】 替罪羊树单次操作的均摊复杂度为 $O(logn)$。 由于替罪羊树的删除方式为懒惰删除,因此在查询第 K 大和查排名时必须考虑子树实际的大小。 由于懒惰删除的效果,Treap 式的前驱后继查询方式对替罪羊树并不适用,需要换成查排名或求第 K 大的方式处理。 代码如下 cpp / A 阅读全文
摘要:
题目大意:给定一个 N 个顶点,M 条边的带权无向图,求该无向图的一个严格次小生成树。 引理:有至少一个严格次小生成树,和最小生成树之间只有一条边的差异。 题解: 通过引理可以想到一个暴力,即:先求出最小生成树,并记录树边,再枚举删除 MST 中的每一条边,每次重新做一次最小生成树算法,并将计算出来 阅读全文
摘要:
总结 一条折线与其他折线相交产生了 $N$ 个交点意味着平面增加了 $N+1$ 个区域。 阅读全文
摘要:
题解:根据《具体数学》上关于迭代约瑟夫问题性质的总结如下:多次迭代的约瑟夫问题的解具有循环移位性质,且答案最终会收敛到不动点处。 代码如下 cpp include using namespace std; const int maxn=1e5+10; int dp[maxn],n,ans; void 阅读全文
摘要:
题目大意:给定 $N$ 个人围成一个圈,每隔 $M$ 个人杀一个,求最后活着的人的编号。 题解:环会涉及模运算,所以先将 $1 \rightarrow N$ 映射为 $0 \rightarrow N 1$,且报数从 $0$ 开始,即:报数到 $m 1$ 的人会被杀掉。假设已知 $N 1$ 人时剩下的 阅读全文
摘要:
经典汉诺塔递推公式为:$f[i]=2 f[i 1]+1,f[1]=1$。 汉诺塔的第 i 层总共移动次数为 $2^{n i}$ 阅读全文
摘要:
题目大意:给定一个四个柱子的汉诺塔,N 个盘子,求最少多少步移动到另一个柱子上。 题解:$f[n]=min(2 f[i]+d[n i])$,其中 $d[i]$ 为汉诺三塔最小移动次数。M 塔同理。 代码如下 cpp include using namespace std; const int max 阅读全文