AW353 雨天的尾巴 (【模板】线段树合并)
摘要:题目地址 易错点: merge()时如果val==0应当把pos也设为0,这样就可以保证没有救济粮的情况下输出值为0. 每次insert后val和pos一定都要更新. 由于要求编号尽量小,pos更新时若tr[tr[p].ls].val>=tr[tr[p].rs].val则tr[p].pos=tr[t
阅读全文
AW256 最大异或和(可持久化0/1trie树)
摘要:题目地址 基本思想: 对于每个询问,要求x^(ap^ap+1^...^an),首先关注后半部分. 对于(ap^ap+1^...^an),可以联想到树状数组中的前缀和相减,于是思考前缀异或和是否也能转换成这种形式. 设bi=a1^a2^...^ai,1<j<i,显然bj=a1^a2^...^aj. 则
阅读全文
P1880 [NOI1995]石子合并(四边形不等式优化DP)
摘要:题目地址 状态设计: fmax[i][j]:从第i堆合并到第j堆的最大得分. fmin[i][j]:从第i堆合并到第j堆的最小得分. s[i][j]:fmin[i][j]被更新时所使用的中间点k. 易错点: 由于有环,所以需要断链加一倍. fmax[i][j]直接使用贪心转移即可. 枚举第一维时,由
阅读全文
快速计算n!阶乘中素因子的个数
摘要:我们来一个样例说明一下: 1 2 3 4 5 6 7 8 我们求得在8!中2的个数 1 1 1 1 首先我们先计算出2的倍数的个数:8/2=4 1 1 其次我们计算出4的倍数的个数: 8/4=2(上面一个式子求出了第一层,现在求第二层) 1 最后我们解出第三层的2的个数: 8/8=1 我们把4+2+
阅读全文
AW379 【模板】DAG最小路径点覆盖
摘要:题目地址 易错点: 需要理解DAG最小路径覆盖的实质.
阅读全文
AW376 机器任务
摘要:题目地址 易错点: 最大匹配的题在加边时经常需要将其中一个的编号平移n个单位. 有多组数据. 注意边数上限.
阅读全文
HDU2255 【模板】KM算法
摘要:题目地址 KM算法 易错点: 配不上的话可能连机会都没有了,所以不要太天真(vb[y]=1(占有)要在配得上(gap==0,门当户对)的前提下). 没缘分的话最好就不要妄想(if(vb[y])continue;). 费用流算法 (qwq)
阅读全文
P3387 【模板】缩点
摘要:题目地址 易错点: 最深刻的孤独,也许并不是面壁者的深思。在那只有一个结点的scc里,不知存放着多少份无处安放的彷徨. 世界上最遥远的距离不是你和我,而是你在搜索树上的那一头,我却在搜索树的这一头。那被有向图规则所束缚着的可达性,令我们天人永隔.
阅读全文
相对大小的圆舞曲 —— 最小割多选一模型
摘要:例题 模板地址 基本思路 首先,肯定是要对于每个同学进行文科与理科满意值的比对,并取较大的满意值。 接下来要考虑的是每个同学的same_art[i][j]与same_science[i][j]值。 可以想到,既然在不考虑周围同学的情况下可以利用网络流的性质进行每个独立同学的文科最大流与理科最大流进行
阅读全文
P4174 【模板】最大权闭合子图
摘要:前置知识:相对大小的圆舞曲 —— 最小割多选一模型 题目地址 基本思路: 最大权闭合子图的权值和等于总正权值减去最大流,即. 建图方法是S连正权值点(边权为点权),负权值点连T(边权为点权的绝对值),正负权值点相互连接(边权为INF). 证明见《最小割模型在信息学竞赛中的应用》第19页. 易错点:
阅读全文
CH1601 【模板】前缀统计 (trie树)
摘要:题目地址 注意点: 直接将ed[]数组作为字符串存在数量的计数数组即可.
阅读全文
P4779 【模板】单源最短路径
摘要:题目地址 注意点: 源点需要设置初始距离(0). 优先队列默认是从大到小排序,因此需要重载运算符.
阅读全文
P3386 【模板】二分图匹配
摘要:题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 题目地址 匈牙利算法 本质上是对于每个点进行dfs,并在递归的同时不断找出新的增广路. 注意点: Dinic算法 和其他题一样,对面的点集需要序号平移n个单位. 匈牙利算法 Dinic算法
阅读全文
网络最大流
摘要:常用优化: 分层时遇到汇点直接返回(一方面可以减少分层时的运算量,另一方面可以加速Dinic的运行) Dinic时无余量直接返回(如果不返回会造成大量的冗余运算) 不分层的Dinic是没有灵魂的 易错点: 不在汇点返回的Dinic如同被堵住的下水道.
阅读全文
历史的进程——单调队列
摘要:基本概念 单调队列是一种能保证队列内元素单调性的队列。 与优先队列的不同之处在于,单调队列保持了元素的下标连续性。 复杂度O(n) 具体过程 单调队列在每增加一个元素之前,都先将队列头部大于/小于(具体取决于单调队列的单调性)将要增加的元素的所有元素清除掉,再增加要增加的元素。 由于对于每一个增加的
阅读全文
快速幂
摘要:前置知识 用二进制表示数字的方法(需要熟练理解) 基本思想 快速幂的基本思想就是将运算进行"降幂",再利用二进制数字合并的原理减少运算次数。 例如,计算a^b则需要不停计算a*a;同理,计算a*b则需要不停计算a+a。 例题 1.求 a 的 b 次方对 p 取模的值,其中 1≤a,b,p≤10^9。
阅读全文
【模板】树状数组
摘要:树状数组1(单点修改,区间查询): 题目地址 #include<cstdio> #include<iostream> using namespace std; int n,c[500010]; int lowbit(int x){ return x&-x; } void add(int x,int
阅读全文
快速幂算法有效性的证明
摘要:在读这篇文章之前,请确保已经完全明白二进制基础以及其他与本文相关的二进制的知识 首先,假设我们要求,设a=3,b=101 将b转化为二进制表示,则为:1100101 通过二进制基础,我们知道:, 通过乘法原理,我们知道:, 因此,可以推出: 那么,我们想象一下:如果计算(设x为任意数)的时间复杂度为
阅读全文