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。
阅读全文
二维偏序——常见问题解答
摘要:一、定义 对于每个点i,都可能有另外一些点的x、y坐标均小于等于点i的x、y坐标,这些点的数量即为点i的二维偏序值. 在图1中,点A的二维偏序值为1,B的二维偏序值为2,点C的二维偏序值为0. 在图2中,点A与点B的二维偏序值均为0. 二、具体过程 为什么要按照第一维排序:对于每个点,显然只有它前面
阅读全文
关于树状数组的几点总结
摘要:零、树状数组的基本概念 1.概念: 树状数组是一种支持对数列进行快速的区间操作(如:区间编号为1~10的值统一增加某个数)的数据结构。 2.实现原理: 二进制加法 位运算 补码和原码 (第一个决定了这个数据结构的理论有效性,第二和第三个决定了具体实现) 3.特性: 如果观察树状数组的结构,可以发现:
阅读全文
快速幂算法有效性的证明
摘要:在读这篇文章之前,请确保已经完全明白二进制基础以及其他与本文相关的二进制的知识 首先,假设我们要求,设a=3,b=101 将b转化为二进制表示,则为:1100101 通过二进制基础,我们知道:, 通过乘法原理,我们知道:, 因此,可以推出: 那么,我们想象一下:如果计算(设x为任意数)的时间复杂度为
阅读全文
二进制在算法编写中的常用概念
摘要:1.已知一个二进制数字(例如:1100101),转换为十进制数字: 2.当一个数字为奇数时,这个数字的二进制表示的最后一位一定为1: 这是因为在二进制表示十进制中,二进制数字的最后一位所代表的数字为,也就是1. 因为二进制中只能一位一位的表示,也就是说,只有存在或不存在两种状态 那么,假设这个数为偶
阅读全文
单源最短路径--Dijkstra
摘要:Dijkstra的用途: Dijkstra是一个求单源最短路径的算法。 "单源最短路径",顾名思义,从一个源头到其他结点的最短路径。而这个算法,可以求出单个点对其他所有点的最短路径长度。(有些情况是Dijkstra不能处理的,比如负边权,遇到这类情况可能就需要使用其他算法了) Dijkstra的思想
阅读全文