自定义博客皮肤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 135

原创 最短路问题

单源最短路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 179

原创 bfs和dfs

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

2022-02-10 01:21:23 249

原创 前缀和和差分

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 432

原创 高精度计算

长整数相加#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 165

原创 排序和搜索

快排模板#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 421

原创 C++stl

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

2021-11-02 19:57:06 62

原创 hash表

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

2021-11-02 18:54:35 82

原创 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 134

原创 2021-10-27

tire数和并查集高效存储和查找字符串集合的数据结构。abcdefabdefacedbcdfbcffcdaabcbc并查集: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 84

原创 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]比如:abcdeabcp[8]=p[3]#include <iostream>#include<vector>#include&lt

2021-10-27 20:04:13 60

原创 2021-10-26

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

2021-10-26 22:33:06 53

原创 2021-10-26

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

2021-10-26 21:50:14 55

原创 离散化操作

离散化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 185 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 120

原创 双指针算法

双指针双指针算法时间复杂度是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 55

空空如也

空空如也

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

TA关注的人

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