LCA总结1
摘要:LCA 有根树中 把点本身也称为它的祖先 方法1:向上标记法(不常用) 从一个点开始向上遍历标记,再从第二个开始向上遍历标记,第一个遍历到的标记的点是LCA 方法2:倍增 预处理fa[i,j]表示从i开始,向上走2^j步所能走到的点 $$ 0<=j<=log(n) $$ $$ f[i,j]= f[
阅读全文
树上dfs+分组背包
摘要:有依赖的背包问题 Code: #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 110; int n,V; int f[N][N];//f[i][j]表示以i为
阅读全文
货币系统(完全背包)
摘要:货币系统 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 110,M=25010; int n,m; int a[N];//货币 bool f[M];//dp
阅读全文
求负环
摘要:基于SPFA (1)统计每个点入队的次数,如果某个点入队n次,则说明存在负环 (2)统计当前每个点的最短路中所包含的边数,如果某点的最短路所包含的边数>=n,则也说明存在环 所有点加入队列 所有点dist[i]=0; 小trick1 spfa算法很有可能会超时,这时候可以: 当所有点的入队次数超过2
阅读全文
混合背包问题+二进制优化
摘要:混合背包问题 #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 1010; int f[N]; int n,m; int main(){ cin>>n>>m;
阅读全文
回转游戏
摘要:IDA-star深搜+模拟标记法+剪枝 题目:回转游戏 Code: #include <iostream> #include <cstring> #include <algorithm> using namespace std; int ti;//times 次数(IDA star) int g[1
阅读全文
[转载]算法学习笔记(75): Gosper's Hack
摘要:https://zhuanlan.zhihu.com/p/360512296 能快速算出n的集合的k元子集
阅读全文
[acwing][模板]基本算法模板
摘要:快排 void quick_sort(int a[], int l, int r) { if (l >= r)return; int p = a[l]; int i = l - 1, j = r + 1;//左右各移动一格,配合do-while while (i < j) { do i++; whi
阅读全文
次小生成树
摘要:一本通:秘密的牛奶运输 次小生成树经典做法总结 定义: 严格次小生成树:生成树权值之和的第二小的数值的树 非严格次小生成树:生成树权值之和的数值第二小的的树 Sol1:(既可以求严格最小生成树,也可以求非严格) 先做一遍最小生成树,枚举每一条非树边,加上这条边,便形成了一个环,再去掉环上权值最大的一
阅读全文
Kruskal维护连通块个数
摘要:一本通 Kruskal维护连通块个数 本题一个关键而巧妙的点是想这个卫星要建在哪个点上,我们可以发现,d=+∞时,卫星k=0,k>=n时,d=0,再分析可知,d越大,k越小,由此我们想到二分d,看当前需要的k是不是小于题目给的k 但是怎么得到这个“当前需要的k”呢?答案是考虑当前的连通块数量,比如现
阅读全文
经典题:map写bfs
摘要:#include<bits/stdc++.h> #define x first #define y second using namespace std; int order[8] = { 4,1,2,3,6,7,8,5 }; int order2[8] = { 1,7,2,4,5,3,6,8 };
阅读全文
分为互斥组
摘要:#include<bits/stdc++.h> using namespace std; const int N = 15; int n; int p[N]; int res = N; int group[N][N]; bool st[N]; int gcd(int x, int y) { retu
阅读全文
莫队+离散化
摘要:#include<bits/stdc++.h> #define ll long long using namespace std; const int N=3e5,M=5e5; int n,m,k,maxn; int a[N],b[N],c[N]; ll num[N]; ll curn; int p
阅读全文
三进制状压dp
摘要:#define _CRT_SECURE_NO_WARNINGS #include<bits/stdc++.h> #define ull unsigned long long using namespace std; const int INF = 0x3f3f3f3f,M=27*27*27-1; i
阅读全文
模板:树状数组
摘要:#include<bits/stdc++.h> using namespace std; const int N=500; int a[N]; int ask(int x){ int ans=0; for(;x;x-=x&-x)ans+=a[x],x-=x&-x; return ans; } voi
阅读全文
最短路输出路径
摘要:#include<bits/stdc++.h> #define x first #define y second using namespace std; typedef pair<int,int> PII; const int N=1010; int n; int g[N][N]; PII pre
阅读全文
Kruskal的经典扩展
摘要:acw348 Kruskal的经典扩展 题意:将一棵树扩展成一个完全图,保证该树是图的唯一最小生成树 关键思想:将一棵树看成是点集由集合合并组成的,每一次集合合并,都建构两个集合之间除树边以外的图边,由Kru算法的原来可知,最短的图边长度是w+1; Code: #include<bits/stdc+
阅读全文