05 2022 档案
摘要:#include<bits/stdc++.h> using namespace std; const int N = 150010; int h[N], ver[N], edge[N], ne[N], cnt; int d[N], n, m; bool v[N]; priority_queue<pa
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; const int N = 510; int m, n, d[N], a[N][N]; bool v[N]; int main(){ cin >> n >> m; memset(a, 0x3f, sizeof
阅读全文
摘要:用一个数组h[ ]储存图中的节点。 每个节点引出一个链表,表明从这个点连接出去的边。 类似 模拟散列表中的拉链法。 由于树是一个无权图。 所以在建立树时使用add(a, b)和add(b, a)。 ne[ ]表示一个顶点指向的下一个顶点的指针。 e[ ]表示当前节点idx,点的序号。 add(int
阅读全文
摘要:vector 边长数组,倍增的思想,支持比较运算。 string 字符串,substr(),返回子串,c_str(),返回字符串对应字符数组的头指针。 queue 队列,push(),插入元素,front(),返回队首的元素,pop(),把队首元素弹出。 priority_queue 优先队列,堆,
阅读全文
摘要:也叫字符串前缀哈希法。 例如字符串“ABCDEFGH”。 用h[0], h[1], h[2]......h[n]分别表示前n个字符的子串的哈希值。 将字符串看作为p进制的数字,再将其mod一个数,得到哈希值。 经验上来说,p一般为131,或13331。 mod的数为2^64。unsigned lon
阅读全文
摘要:值得注意的是,N应选择一个质数,且N的大小应为数据量的两到三倍。 memset函数在cstring库中,是按字节赋值。 可以将数组所有的值赋为0,-1. 但没办法将值赋为1. #include<iostream> #include<cstring> using namespace std; cons
阅读全文
摘要:将一个较大的空间映射到一个较小的空间下。 采用数组模拟链表头插法的操作。 e[ ]储存的是插入的元素的值。 h[ ]储存的是插入的元素对应的哈希值的指针。 ne[ ]储存的是当前指针指向的下一个位置的指针。 #include<cstring> #include<iostream> using nam
阅读全文
摘要:堆排序中,最主要的是这个down()函数 #include<iostream> using namespace std; const int N = 100010; int h[N], cnt; void down( int k ){ int t = k; if(k * 2 <= cnt && h[
阅读全文
摘要:#include<iostream> using namespace std; const int N = 100010; int p[N], siz[N]; int find(int k){ if(p[k] != k) p[k] = find(p[k]); return p[k]; } int m
阅读全文
摘要:并查集,使用数组实现,find函数中使用了巧妙的递归 #include<iostream> using namespace std; const int N = 100010; int p[N]; int find(int k){ if(p[k] != k) p[k] = find(p[k]); r
阅读全文
摘要:此题目使用Trie树,代码中的N代表着节点可能的最大个数。 #include<iostream> using namespace std; const int N = 3100010; int son[N][2], num[100010], idx; void insert(int k){ scan
阅读全文
摘要:#include<iostream> using namespace std; const int N = 100010; int son[N][26], cnt[N], idx; char str[N]; void insert(char *str){ int p = 0; for(int i =
阅读全文