算法

尺取法 与单调队列相关 要求在满足条件的情况下,长度越长,答案越好(下简称具有单调性). 利用双指针 $l,r$ 及队列思想,对于同一个 $l$ 让 $r$ 尽可能延伸至最远,得到一个
2020-02-04
7分钟阅读时长
commit 命名规范 feat: 一个新功能 fix: 一个 bug 修复 docs: 仅仅修改了文档,比如 README, CHANGELOG, CONTRIBUTE 等 style: 不影响代码逻辑的修改,比如空格、格式缩进、删除分号等 refactor: 代码重构 perf: 提升性能的改动 test: 增加
2020-01-21
3分钟阅读时长
C++ STL:SET & MULTISET 定义 方式 效果 set <数据类型名> 集合名; 先定义一个容器,容器内无任何元素 set <数据类型名> 集合名(另一个集合名)
0001-01-01
3分钟阅读时长
CF387D 题意分析 操作最少的次数,构成有趣图,注意无重边,有向边。 操作分为加边和删边。 有趣图定义 有一个中心,满足此点有自环,且与其他结点有双向边。 除中心点外的
0001-01-01
2分钟阅读时长
常见的贪心技巧 货币使用问题: 尽可能少用,那么我们就先拿面值最大的,依次往下走,最后拿光了即可。 区间调度问题: 工作时间不能重叠,在可选工作中,每次都选取
0001-01-01
2分钟阅读时长
匹配:模板 UOJ78 二分图最大匹配(DFS - KM) #include <stdio.h> #include <string.h> #include <iostream> using namespace std; const int N = 550; int match[N], g[N][N], vis[N], link[N]; int n, m, e, tag, ans = 0; bool dfs(int u) { for(int v=1; v<=m; ++v) { if(!g[u][v] or vis[v] == tag) continue; vis[v] = tag; if(!match[v] or dfs(match[v])) { match[v] = u; return true;
0001-01-01
2分钟阅读时长
单调队列 具有单调性的队列。当一新值准备入队时,须先从后向前,将对后来答案没有了影响的点弹出,再从前向后,将所有超出了统计范围的点弹出。对于大多数问题,
0001-01-01
2分钟阅读时长
图论 图论算法一般都是揉在一起的,很难单独把算法拆开讲,所以直接上题目吧。分类是大致分的,其实有很多是交叉的。 二叉树 二叉树的遍历有三种,分别为前序遍历,
0001-01-01
5分钟阅读时长
LCA: Lowest common ancestor最近公共祖先 倍增求LCA 预处理向上跳2^k步的结果f[k][x] $O(n \log n)$ 求的时候先把两个点跳到一个深度,这里有一个特判,如果重合直
0001-01-01
1分钟阅读时长
前置概念 时间戳:搜索时第几个搜索到这个点。如搜索顺序是1->2->3->6,则6的时间戳为4 对于无向图 连通分量:对于图G来的一个子图
0001-01-01
3分钟阅读时长