摘要:
涉及知识点:组合数学 题面 Link 小Z是一位热爱优化算法的同学。 一天他在研究归并排序,并想到,如果在归并排序的过程中提前return,对正确率的影响并不会很大。 于是他写了如下部分代码: void merge_arr(int l,int mid,int r)//此函数表示将S[1,mid],S 阅读全文
摘要:
矩阵优化递推的思想在于把递推的层数化为矩阵的幂数,也就是说设计一个矩阵 \(A\),使得 \(A^n\) 中的某个元素就是递推的第 \(n\) 项,即 \(f_n\)。这么做就可以将 \(O(n)\) 的递推优化为 \(O(\log_2 n)\)的矩阵快速幂(矩阵 \(A\) 的行列数为常数,因此快 阅读全文
摘要:
涉及知识点:贪心,递推(? 写在前面 这题虽然是一道黄题(其实应该评绿的),但这是对于 \(O(n^3)\) 的做法而言;这篇博客的做法是 \(O(n^2\log n)\),个人觉得大概算蓝。 这个做法细节很多,我七七八八算下来交了十几发才过,思路和另一个大佬有些像,但是相对于他的博客进行了一些优化 阅读全文
摘要:
涉及知识点:动态规划 题目链接 题意 给你一个数轴,数轴上有$n$个点,选其中一些点进行两两配对,配对要求是这两个点之间距离不能超过$k$,且一个点只能有一组配对,使得未配对的点之间无法再进行配对。每个点有个代价$y_i$,我们称一种配对方案的代价为未配对的点的代价和,求配对方案的最大或最小代价 分 阅读全文
摘要:
区间和线段树封装模板,开箱即用 注意:线段树大小最多支持$2^{30}-1$个数 声明方法: SegSumTree<typename>st,typename为线段树存储的类型(建议只填写整数类型),建立一颗空线段树,后续必须先用rebuild或resize初始化 SegSumTree<typenam 阅读全文
摘要:
注意:本文适合已经学过该知识点的人快速复习记忆,有些原理会直接略过,初学请留步 ST表 RMQ离线查询,不支持修改预处理\(O(n\log n)\) 查询\(O(1)\) 思想:倍增,设\(f(i,j)\)为区间\([i,i+2^j-1]\)的最大值 预处理: \[j=1\rightarrow\lo 阅读全文
摘要:
Tips:本文适合快速复习,非教学文章。 目录最短路最小生成树(MST)树的直径树链剖分重链剖分长链剖分最近公共祖先(LCA)树的重心树上差分基环树拓扑排序差分约束连通性问题(Tarjan)强连通分量(SCC)割点点双连通分量(v-BCC)割边/桥边双连通分量(e-BCC)2-SAT圆方树欧拉图DA 阅读全文
摘要:
加 fread 优化: #ifdef ONLINE_JUDGE #define getchar __getchar inline char __getchar(){ static char ch[1<<20],*l,*r; return (l==r&&(r=(l=ch)+fread(ch,1,1<< 阅读全文
摘要:
涉及知识点:最小生成树,倍增 题意 题目链接(洛谷) 题目链接(AcWing) 题目写的很清楚,给定一张N个点M条边的无向图,求无向图的严格次小生成树。 设最小生成树的边权之和为sum,严格次小生成树就是指边权之和大于sum的生成树中最小的一个 拓展: 边权和最小的满足边权和大于等于最小生成树边权和 阅读全文
摘要:
涉及知识点:LCA,树上差分 题意 题目链接 题目乱七八槽的说了一大通,但实际上抽象出来就是: 有两种边,一种是主要边,一种是附加边,主要边构成一颗树,附加边为连接树上节点的非树边(注意可以有自环)。首先剪断一条主要边,再剪断一条附加边,使得整张图变为不连通的两部分,问有几种方案**(就算第一步就斩 阅读全文
摘要:
众所周知,C++ 中就算是精度最高的浮点数 long double 也会存在可观的精度丢失的问题,那么我们该如何解决这个问题呢?高精度浮点数又显得过于夸张繁琐。 何不想个折中的法子? 于是,我们想到了一种办法,用 long long 分别表示分母和分子! 而我们在进行分数运算的时候,就可以模拟人工手 阅读全文
摘要:
题目分析 首先我们来抓题目里的关键信息:最少、M≤20 那么由此得出做法就是DFS、贪心或DP,我们一一讨论 DFS 暴搜复杂度\(O(m!)\),只能过70%(70%它不香吗) 贪心 如果要贪心我们需要证明局部最优可以导致整体最优,遗憾的是我们找不到这种性质 DP 由于M≤20,我们可以很快想出是 阅读全文