自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 生成树he二分图

1.prime算法 就是迪杰斯特拉的一种类似算法,迪杰斯特拉是求该点到起点的最小值,但是这里是指求到集合的最小值,也就是说,集合中有1,2这两个点,然后e[1,3]=3, e[2,3]=2; 那么就是dist[3]=2; #include <iostream> #include <algorithm> #include<cstring> using namespace std; const int N=503; int g[N][N]; int n,m; int

2022-03-24 16:52:02 223

原创 最短路问题

单源最短路 1.所有边的权重都是正数 1.朴素迪杰斯特拉 O(n^2)//这里如果是稠密图则用邻接矩阵,稀疏图是邻接表 2.堆优化版迪杰斯特拉O(mlogn) 2.存在负数边 1.贝尔曼佛雷算法 O(nm) 如果有负权回路的话可能是找不到最短路的!!!!有边数限制的最短路径问题就只能用这个算法,其他时候SPFA算法优于它 2.SPFA O(m),最坏O(nm) 多元汇最短路 1.Floyd算法O(n^3) ...

2022-03-23 23:17:59 264

原创 bfs和dfs

搜索 dfs:空间O(n)不具有最短性 栈 回溯和剪枝 bfs:空间O(n^2)具有最短性 队列

2022-02-10 01:21:23 308

原创 前缀和和差分

a是一个数组,s记录前多少个a的和,在做题时这一思想经常被使用。 #include <iostream> using namespace std; const int N=1e6+10; int n,m; int a[N],s[N]; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); s[i]=s[i-1]+a[i]; }

2022-02-08 15:01:35 489

原创 高精度计算

长整数相加 #include <iostream> #include <vector> using namespace std; vector<int> b,a; vector<int> add(vector<int>a,vector<int>b){ vector<int>c; int t=0; for(int i=0;i<a.size()||i<b.size();i++){

2022-02-08 00:18:07 212

原创 排序和搜索

快排模板 #include <iostream> using namespace std; const int N=1e6+10; int n; int q[N]; void qp(int q[],int l,int r){ if(l>=r) return; int x=q[l+r>>1],i=l-1,j=r+1; while(i<j){ while(q[++i]<x); while(q[--j]>x)

2022-02-07 19:26:48 469

原创 C++stl

STL vector(变长数组),倍增的思想,支持比较运算(按字典序) 定义:: vector a; 定义:一个vector数组a vector a(10); 定义:一个长度为10的vector数组a vector a(10,3); 定义:一个长度为10的vector数组a,并且所有元素都为3 常用函数:: size(); 返回元素个数 empty(); 返回是否是空 clear(); 清空 front(); 返回vector的第一个数 back(); 返回vector的最后一个数 push_back

2021-11-02 19:57:06 118

原创 hash表

hash表 1.存储结构: 1.1开放寻址法 1.2 拉链法 2.字符串哈希 h(x)哈希函数 1.

2021-11-02 18:54:35 133

原创 tire数据结构和堆

手写堆 1.插入一个数 heap[++size]=x;up(size); 2.求集合当中的最小值 heap[1]; 3.删除最小值 heap[1]=heap[size];size–;down(1) STL的堆以下两个无法直接实现 4.删除任意元素 heap[k]=heap[size];size–;down(k);up(k); 5.修改任意元素 heap[k]=x;down,up 堆是一个完全二叉树 小根堆:根是最小值,每个点都满足<=下面两边的点 存储:用一维数组 根是1;x的左儿子的2x

2021-10-28 01:00:22 197

原创 2021-10-27

tire数和并查集 高效存储和查找字符串集合的数据结构。 abcdef abdef aced bcdf bcff cdaa bcbc 并查集: 1.将两个集合合并 2.询问两个元素是否在一个集合内 每个集合用一棵树表述,树根的编号就是集合编号,每个节点存储它的父节点,p[x]=x的父节点。 问题一:如何判断树根:if(p[x]==x) 问题二:如何求x的集合编号:while(p[x=!=x)x=p[x] 问题三:px是x的集合,py是y的集合,p[x]=y; 优化(路径压缩): 一旦往上找到了根节点,就

2021-10-27 21:16:26 148

原创 2021-10-27

KMP算法 匹配子字符串 1.暴力算法 S[N],P[N]; for(int i=1;i<n;i++){ for(int j=1;j<=m;j++){ if(s[i]!=p[j]){ break; } } } kmp算法中的next数组: Next[i] =j 说明p[1]~p[j]=p[i-j+1] ~p[i] 比如:abcdeabc p[8]=p[3] #include <iostream> #include<vector> #include&lt

2021-10-27 20:04:13 124

原创 2021-10-26

数组实现栈 #include<iostream> using namespace std; const int N=100010; int stk[N],tt; //插入 stk[++tt]=x; //弹出 tt--; if(tt>0)not empty else empty //栈顶 stk[tt] //在队尾插入,队头弹出 int q[N],tt,hh; //弹出 tt++; //插入 q[++hh]=x; if(hh<tt)not empty else em

2021-10-26 22:33:06 103

原创 2021-10-26

数组模拟链表与邻接表 在算法题里数组会比链表更快 1.数组模拟单链表 1.1邻接表,是n个链表,存储图和树 head->0 e[N],表示该节点的值 ne[N]表示下一个节点坐标 用下标关联 空节点用-1的下标表示 #include<iostream> using namespace std const int N=100010; int idx,head,e[N],ne[N]; //idx指向当前可以使用的节点下标(最小的空数组下标) void init(){ head=-1; id

2021-10-26 21:50:14 100

原创 离散化操作

离散化 a[] = { 1,3,8,10000 } 映射 b[] = { 0,1,2,3 }; 1.a中可能有重复元素,需要去重, 用库函数,现sort再 a.erase(unique(a.begin(), a.end(), a.end())); 2.可以快速映射到b,利用二分查找。 例题:区间和 #include <iostream> #include <vector> #include <algorithm> using namespace std; typede

2021-10-26 17:23:54 256 1

原创 二进制的操作

关于进制 所有的数在电脑里的存储是二进制 位运算,n的二进制表示中的第k位是几 先把第k位移到最后一位来n >> k/1; 十进制的数>>1就等于是/2; lowbit(x) -x=取反x+1; x=10100100 -x=01011011+1=01011100 所以这里就用到了lowbit(x); int lowbit(int x){ return x & ~x ; } #include <iostream> using namespace std; int

2021-10-26 16:57:02 195

原创 双指针算法

双指针 双指针算法时间复杂度是O(n) for(i=0,j=0;i<n;i++){ while (j < i && check(i, j))j++; } 例题:字符串输出比如: abc bcd edf 跳过空格输出 #include <iostream> #include<string> #include<vector> #include<algorithm> using namespace std; int main() {

2021-10-26 16:48:57 95

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除