07 2022 档案
摘要:Johnson Johnson算法是一种Donald B. Johnson在1977年发布的:在边加权有向图中找到所有顶点对之间最短路径的算法。 jonhnson允许某些边权重为负数,但不能是负环。 通过使用Bellman-Ford 算法来计算输入图的转换,以消除所有负权重,从而允许在转换后的图上使
阅读全文
摘要:摘抄自 #include <bits/stdc++.h> using namespace std; #define debug(x) cout << #x << "=" << x << endl; const int N = 1e4 + 5; int n, m, cn, col[N]; int a[
阅读全文
摘要:7-23洛谷做题记录 P1359 租用游艇 DP求或最短路 #include <bits/stdc++.h> using namespace std; int f[210],i,j,k,n; int main() { cin >> n; for(int i = 1 ; i <= n ; i ++ )
阅读全文
摘要:左偏树学习笔记 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int fa[N],ls[N],rs[N],dist[N],val[N],id[N]; bool del[N]; int n,m,cnt; int
阅读全文
摘要:【模板】欧拉路径 求有向图字典序最小的欧拉路径。 如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path)。 如果一个回路是欧拉路径,则称为欧拉回路(Euler circuit)。 简单的来地讲,就是一笔画问题。 欧拉图的判定 最多只有一个顶点的出度与入度差为1 。 最多
阅读全文
摘要:Treap Treap(树堆)是一种 弱平衡 的 二叉搜索树。它同时符合二叉搜索树和堆的性质,名字也因此为 tree(树)和 heap(堆)的组合。 -oiwiki 二叉搜索树的特点是:左节点比父点大,右节点比父小。 堆的特点是 朴素二叉搜索树的问题。在给朴素搜索树插入一个新节点时,我们需要从这个搜
阅读全文
摘要:Tarjan Robert E. Tarjan(罗伯特·塔扬,1948~),生于美国加州波莫纳,计算机科学家。 Tarjan 发明了很多算法和数据结构。不少他发明的算法都以他的名字命名,以至于有时会让人混淆几种不同的算法。比如求各种连通分量的 Tarjan 算法,求 LCA(Lowest Commo
阅读全文
摘要:【模板】差分约束算法 题目描述 给出一组包含 个不等式,有 个未知数的形如: $$ \begin{cases} x_{c_1}-x_{c'1}\leq y_1 \x{c_2}-x_{c'2} \leq y_2 \ \cdots\ x{c_m} - x_{c'_m}\leq y_m\e
阅读全文
摘要:【模板】负环 题目描述 给定一个 个点的有向图,请求出图中是否存在从顶点 出发能到达的负环。 负环的定义是:一条边权之和为负数的回路。 本题单测试点有多组测试数据。 输入的第一行是一个整数 ,表示测试数据的组数。对于每组数据的格式如下: 第一行有两个整数,分别表示图的点数 $n
阅读全文
摘要:#include <bits/stdc++.h> using namespace std; int gcd(int x,int y){ return y?gcd(y,x%y):x; } int main() { int n; cin >> n; for(int i = 1,x,ans = 0; i
阅读全文
摘要:LCA最近公共祖先 对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u和v的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先。-百度百科 先DFS求出每个点的深度,在通过倍增向上爬。预处理,查询 #in
阅读全文
摘要:起因 最近要写LCA然后忘记了ST表这么写QWQ ST表是什么,ST基于倍增和二进制划分动态规划可以在预处理下回答问题 用于解决可重复问题,如问题 模板题 预处理 设为的最大值,即从开始的
阅读全文
摘要:本文整理自《算法竞赛进阶指南》IO.wiki 线段树一种用来维护区间信息的通用数据结构 线段树可以在 的时间复杂度内实现单点修改、区间修改、区间查询(区间求和,求区间最大值,求区间最小值)等操作。 线段树的建树 通过递归将值划分为大于1的若干个区间,把数列划分为树形结构,通过
阅读全文
摘要:题目地址 标准完全背包 思路见注释: #include <iostream> #include <cstring> using namespace std; const int N = 10000,M = 45; int
阅读全文
摘要:题目地址 [USACO2.2]集合 Subset Sums 题目描述 对于从 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。举个例子,如果 ,对于 能划分成两个子集合,每个子集合的所有数字和是相等的: 和 ${1,2
阅读全文
摘要:题目地址 一道分组背包但是要改输入方式 #include <iostream> #include <cstring> using namespace std; const int N = 1001; int m,n; int f[N],v[N],w[N],b[N]; int g[350][350];
阅读全文
摘要:组合数1 给定 n 组询问,每组询问给定两个整数 a,b,请你输出 的值 数据范围 ~~上过小学的应该都知道~~ $$ C_a^{b} = \frac{a\times (a - 1) \d
阅读全文
摘要:01 背包 有 件物品和一个容量为 的背包。第 件物品的重量是 ,价值是 。求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。 设DP状态为表示在只能放前个物品,容量为的价值情况 考虑已经放了$i-1
阅读全文
摘要:hash表 hash表 存储方式 开放寻址法 拉链法 字符串hash 离散化实际上就是一种特殊的哈希方式【单调递增】 拉链法 如果有一个数是冲突的,用一条链将他们栓起来,像邻接表一样 void insert(int x) { int k =((x % N) + N) % N; e[idx] = x;
阅读全文