OI 小细节记录
double 数组的初始化:
正无穷:0x7f
,负无穷:0xfe
,不过注意如果需要保留两位小数这样精度不大的数的时候,正无穷 0x43
,负无穷 0xc2
set 用 lower_bound
进行二分查找时,和 vector 是不一样的
例如在一个二维 vector 查找大于等于 \(x\) 的数应该这样写:lower_bound(vec[i].begin(), vec[i].end(), x)
但是在一个二维 set 里面就得这样写:se[i].lower_bound(x)
,否则甚至会 TLE,调了我半天
写树上问题的时候,DFS 里面有一个参数 fa
,很多树上问题需要根据父节点记录什么东西,我总是忘记特判 -1
DFS 遍历图求东西的时候,例如求一个点走 xx 步到哪里,把枚举放到 DFS 里面,不要放在 main 里面,否则会乘上 N + M 的复杂度
重载小于号:sort
里面 a < b
是从小到大,堆里面是大根堆
随机生成树拉一条链
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int A[N];
mt19937 rnd(time(NULL));
int main()
{
int n = 10;
for (int i = 0; i < n; i++) A[i] = i + 1;
shuffle(A, A + n, rnd);
cout << n << endl;
for (int i = 1; i <= n / 3; i++) printf("%d %d\n", A[i - 1], A[i]);
for (int i = n / 3 + 1; i < n; i++)
printf("%d %d\n", A[rnd() % i], A[i]);
return 0;
}
如果定义了迭代器 auto it = s.begin()
然后删除了它 s.erase(it)
此时再用 *it1
就会报错,取决于编译器版本