图论基础
图的储存储存图有很多种方式,在此介绍难度循序渐进的三种:邻接数组,邻接表,链式前向星。第一种虽然简单,但访问的时间和空间花销过大,第三种最为优越,但使用较难,因此第二种最为常见。让我们分别看看它们是什么 在介绍之前,我们先解释一下此处说的“图”是什么。 在算法领域,图一般指多个节点之间相互连接的关系。这就是一个简单的图: 从上图可以看出,节点之间的联系可以是有向的,也可以是无向的,把图分为有向图和无向图。节点之间的“边”可以是有长度的,也可以是无长度的,这里的长度一般被称为“权值”,把图分为有权图和无权图。注意,权值并不一定是边的长度,也可以是和边有关的值,需要具体问题具体分析。 现在,我们来介绍一下如何储存这种点和边的关系。 邻接数组这是最为简单的方法,使用一个二维数组去储存点和边的关系。我们只考虑最复杂的有权有向图,至于其他类型,可以从有权有向图简化得到。如无权有向图就是把权值改为1即可。 现在用邻接数组储存...
matrix
析构函数释放规律局部变量储存在栈区域所以释放的时候采用“后创建 先释放”的模式并且在函数内在创建一个栈,例如花括号,函数递归,会先释放内部栈元素,再释放外部栈元素1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#include <iostream>using namespace std;class MyClass {private: int id; static int count; // 静态成员变量public: MyClass(int id){ this->id=id; count++; cout << "Constructor: Object " << this->id << " created. Total objects: " << count...
洛谷力扣
2680. 最大或值问题:观察到,要选找位数最高的数左移k位,才可能使或值最大 尝试通过两次循环而不是排序找出所有最高位元素。 时间复杂度从$O(nlogn)$到$O(n)$ 随后,对取出的最高位元素各自尝试左移,找出最大答案。 时间复杂度约$O(nlogn)$ 整体时间复杂度约为$O(nlogn)$ 成功TLE 代码:123456789101112131415161718192021222324252627282930313233class Solution {public: long long maximumOr(vector<int>& nums, int k) { auto maxIt=max_element(nums.begin(),nums.end()); int maxIndex=maxIt-nums.begin(); int len=nums.size(),big=0,temp=nums[maxIndex]; while(temp){ ...
DFS/BFS以及剪枝技巧
DFS简介DFS含义 ⭐DFS,即Depth-first-search,是深度优先搜索的简称。 它的主要思路是一直沿当前分支搜索,当搜索到尽头之后返回,再逐步向其他地方扩散。 我们可以通过一个树形结构说明DFS的遍历顺序 1234567 A / | \ B C D / \ | E F G / \H I 遍历顺序:(假设一直沿左分支走)A→B→E→H→I→F→C→D→G 当然,完全可以沿右分支先走,甚至遍历起点并不非得是树的顶端。事实上,DFS的实现依赖于递归,而遍历的顺序也和递归的位置息息相关。甚至通过调整递归的顺序,我们可以用三种方法遍历一个二叉树,不过这并不是本次重点,不过多叙述接下来让我们通过一个简单的例题来看看DFS的实现。 全球变暖P8662 [蓝桥杯 2018 省 AB] 全球变暖 题目描述你有一张某海域 $N \times N$ 像素的照片,. 表示海洋、 # 表示陆地,如下所示: 1234567........##.....##........##...####....###........ 其中...
动态规划简介(未完)
普通dp普通dp是指一些很浅显的、可以由无后效性和最优子结构得出答案的题目 非常基础的题目:P1216 数字三角形1234567891011121314151617181920#include<bits/stdc++.h>using namespace std;int n;int dp[1001][1001];int main(){ cin>>n; int maxNum=0; for(int i=1;i<=n;i++){ for(int j=1;j<=i;j++){ int now; cin>>now; int j1=(j-1)>=1?j-1:1,j2=(j<=i-1)?j:i-1; dp[i][j]=now+max(dp[i-1][j1],dp[i-1][j2]); if(maxNum<dp[i][j]) ...
C++:sort使用技巧以及快排实现
sort()简介sort() 是 C++ 标准库中的一个排序函数,定义在 $algorithm$ 头文件中。它的排序时间复杂度是$O(nlgn)$,远胜于普通的冒泡排序和选择排序。现在介绍其函数重载、使用方法以及快速排序的具体实现。 sort()使用方法默认排序(不传入函数参数)1234567891011#include<iostream>#include<algorithm>#include<vector>using namespace std;int main(){ vector<int> example={11,42,3,24}; sort(example.begin(),example.end());//传入迭代器或指针,指向开头和结尾,默认是升序排序 int example1[]={22,33,11}; ...
C++:String类
💡string类初始化常用的初始化有赋值初始化与直接初始化在C++种,还可以用列表初始化,但在string类初始化中并不常见1234567891011121314151617181920212223242526#include <iostream>#include <string>using namespace std;int main(){ string z;//初始化空字符串 string a ="Hello, world";//复制c风格字符串直到遇到'\0' string b("Hello!");//调用构造函数复制c风格字符串 string b1=string("Hello!");//与上一种写法等价 string c(5,'z'); string d("HelloWorld", 5); // "Hello",取C风格字符串的前n个 string...
hexo部署/美化踩坑
前言在经过几天的努力后,终于搭建起了个人的hexo博客,使用蝴蝶主题。个中过程有许多琐碎细节,在此写出,以供参考。在部署成功之前的bug已有许多成熟教程,不再赘述。 部署博客时间线 2025 02-24 部署好hexo框架(此前细节不表) 02-26 解决LaTex公式渲染问题 02-27 发现封面报错和字体报错 03-02 解决多次部署的bug问题 03-03 发现网站配置英语问题如何解决 新建页面(标签页) 03-03 自设标签页美化 03-06 调整md文档背景以及博客中出现的所有白色背景 字体美化 ...
C++:vector容器
一、vector1.1 vector是什么vector是C++标准库提供的一个容器类,可以理解为可变长度数组。在初始定义时无需申明长度,可以一直往后填充数据。填充时,vector容器会自动拓宽可用空间。储存该容器类的头文件是\vector储存的数据是连续的,和数组一样 一般地,vector拓宽空间时会将已有空间翻倍。 假如vector所处地址没有这么大的连续内存可供使用,编译器会进行内容重分配:寻找一处可存放翻倍后的vector数组的连续空间,将vector数组拷贝过去,时间复杂度是$O(n)$ 也因此,有时候使用vector的速度会比使用普通数组慢一点 1.2 vector提供的一些方法让我们先来看一个具体的vector使用示例: 1234567891011121314#include <iostream>#include <vector>using namespace std;int main(){ vector<int> a={12,33,4}; ...