图的存储(记录常用的三种一.邻接矩阵直接通过二维数组存储,例如
1234map[i][j] // i 维度 表示边的起点,其所对应的 j 维度的每个点都是与 i 点相连的终点// 由此可见,此法所表示的每一条边都是有向边,如果解决问题所需的是无向边,只需 i->j 和 j->i 各记录一次即可。//值得一提的是,如此表示无向边,要注意数组的大小,要是两倍边数以上才可以
二.vector 存储12345678910111213141516#include <vector>using namespace std;int V = 5; // 顶点数vector<vector<int>> adjList(V);// 添加边void addEdge(int u, int v, bool directed = false){ adjList[u].push_back(v); // 判断边是否有向 if (!directed) { adjList[v].push_back(u); // 无向图 ...
68524584f48f9eafa974b4b28c0b14ca6168f0a4128ef55a8ddb10c5ddab1203b9f327a72d916926f673322622f60638fe0abb3d1a93115f752b29c81f66c6d6a383b5b3746760ed16af41aef3e51a05b3814e4548d0ac7145119c9ac771c58565b5c44c7fd7bd0e172dca9eb743cc6cd3210ad518483620087a7f145c991972aecd6339077422ae4d88da9c8990a25dc5a0cc991645d4fde429c7caa67c0e57b6fa4e0c04c3ec9d5a170b0e00b75929932e747989f5c4d1d107346392b523aa7a421f41351772e5012c2c3dbb80c5d387f6834ff65579df365d19ddd09936dc6f2702a5a823bf82efd41c8c948f9628eef7de488fe0b523e ...
素数1.随着数字增大,素数的出现概率变小,越来越稀疏
2.素数的数量约等于 logn
素数筛 (欧拉筛)123456789101112131415161718192021222324252627#include <iostream>#include <cstring>using namespace std;//求小于等于1e7的所有素数const int n = 1e7;//isprime用于判断某个数是否是素数bool isprime[n + 1];//prime用来存放找到的素数int prime[n];//用来记录找到的素数的总数int cnt = 0;int main(){ memset(isprime, 1, sizeof (isprime)); for (int i = 2; i <= n; i++) { if (isprime[i]) { prime[++cnt] = i; } for (int j = 1; j <= cnt && i * ...
ba211ecd285c30f4d5a37ce98f3feef024113be4c2599c284ca11af845fb48550e1b605f60b08241bead9bbdd9e6091cbe4daf19059bc4dec82b9d3603e07aad53596b42199afb9dc1a551f07d5b00e3ce361f4eb0b173dd83d7a8480c4176bcf8293ae6906f6df6d6644315609f9e9c068f596e36bc6453f4aebc6a8370a16960a6ea03ed6dfae7d66995221b1f4c235001c9576989ae0fbc5943382e24ff6e1a3dbea6b8af62fbfed97cfcbd084168b18c24e03522968acdc83d3f658d7cf08faf42dcbfedae605e0546e08de39177ab388d4ed671d4f2efa4b8f4a46efaa76e19630d878262f2f2e980f7d49a9486e7fed2314a1a2975e ...
066fded1daaf151d99aff16f342f0bbc428895577d3dd4d8f780ddce141b3a71e93963eed9886d3f588445c7d7de9ddaeefe075f3e5e112d03777c3b6378f35d6a0f7cd631f43b92d83991f707911b1dbf32b80cf0650d4dd55fa73725531539fb4436f49d1c52e0cfacb9b6606b7b233fafa6774c71765233cf38e483f1b34f8e086a33091087a2fe13f3931989097844415c1cd77be4ad22e1d7b953a0eaee7c7362a7556b15e26f865ba7b7f3052ffc0717e38fc96da1fb7aa6b27d7d4880e41c973dab29dd985d88215cf06630c81b118ad62bb51d39044319305db80f274110f76ff6dd15a448f7ac8f885614b6ff09e05cf59fa173a ...
并查集定义并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)
初始化1234567//定义数组,记忆每个节点对应的父节点int fa[N];for (int i = 1; i <= N - 1; i++){ //初始时,每个节点的父节点就是自己本身 fa[i] = i;}
定义 find 函数,用于寻找某个节点的根节点(就是父节点的父节点的父。。。。。12345678910111213141516171819202122232425//非递归写法int find(int x){ while (fa[x] != x) { x = fa[x]; } return x;}//递归写法int find(int x){ if (fa[x] == x) return x; else { return find(fa[x]); }}//简化写法int find(int x){ return fa[x] == x ...
a39a1119751052137aae45c5cd48e688c2533ea2938937739528a9ccd5f780e8fdc74f2c6432519811f82ec7db4f1f342d6bd15d7529f1cbffc1b183f3bcf9bef2c39db0397dfb7a84da7e69f2d24ad465084a7e673c985adf553db9b3ae01e2936b2968450dec091b4555d49055596c4c1171a8e26524da721ee6266106a856373e1f00a7e1e7ec2562f6f7970ccf6b31196d9a781aeeeac3a40104c7cb46cc09cb8c731fecaa39a3ce5e5fc9411c4c6d4ae9cfdc9e322da74714659ef0e15e8b2eb74a104432065318bd6bdd03303b8fc50a15a47b2b93befab119f3c557bcbc323b618d9934bfdc0532df05c39deb557e2563fcb9b2ca0 ...
优先队列 #include <queue>
代码 含义
q.push(ele) 元素ele入栈增加元素 (logN)
q.pop() 弹出队首元素 (logN)
q.top() q.top() == 队首元素
q.empty() 判断栈内是否为空,空为真
q.size() 返回栈内元素的个数
没有 clear!!!设置优先级1234567//默认大根堆,每次取出最大元素priority_queue<int> q;//小根堆,每次取出最小元素priority_queue<int, vector<int>, greater<int>> q;//less<int> 表示数字大的优先级大,堆顶为最大的元素//greater<int>表示数字小的优先级大,堆顶为最小的元素
pair代替二元结构体
12345678910111213141516171819//头文件#include <utility>//1.初始化定义pai ...
栈 代码 含义
s.push(ele) 元素ele入栈增加元素
s.pop() 弹出栈顶元素
s.top() s.top() == 栈顶元素
s.empty() 判断栈内是否为空,空为真
s.size() 返回栈内元素的个数
数组模拟栈的遍历12345678910// 栈 从左至右为栈底到栈顶int s[100];// p 代表栈顶指针,初始栈内无元素,p为-1int p = -1;for(int i = 0; i <= 11; ++i) { //入栈 s[++p] = i;}// 出栈int top_element = s[p--];
栈的应用题目大意:有 n 个人从左到右排成一队,全部人向右看,每个人会被比自己高的人挡住,求出每个人是被哪个位置的人挡到。如果没有被挡住就输出 0。
思考:因为向右看,所以最右一个人一定是输出 0,从右向左考虑,如果一个人 a,a 的左边人如果比 a 高,那么 a 就失去挡住别人的能力,如果左边人比 a 矮,那么两人都可能有挡住别人的能力。
代码模板 ...

