考前提醒
置顶:一定要对拍
- 不开
long long
见祖宗(还有__int128
)。
不开 long long
见祖宗。
不开 long long
见祖宗。
如 1<<n, for(int i = 1, x; i <= n; i++)
- 多测要清空,清空要把所有影响的全局变量清空
多测要清空
多测要清空
-
排序时要把所有有关系的元素丢进结构体里
-
如果使用自定义函数进行
sort
,需保证相等时返回false
。 -
数组一定要开够。如双向边要开两倍,新加辅助点也要开两倍。写完要检查一下。
-
不会的题不要忘了拼部分分
-
前面的题想不出来可以去想后面的题,难度不一定正序,特别是部分分的性价比。
-
注意题目是否要求输出方案的步数。
-
过不了样例不一定是结论错了,要检查写挂的地方。
-
数据多测时,特判不能直接
return 0;
或break;
,要写continue;
,而且要在读入完数据之后。 -
关闭同步流后不能用除了 cincout 以外的输入输出方式。
-
看清楚模数。
下面是易写错的地方:
-
=
和==
分不清,如写并查集的时候。 -
平衡树一个点的 \(sz\) 要设为 \(1\), pushup 时要 \(sz\) 时左右孩子之和加 \(1\)。
-
求 e-DCC 时不用判重边自环,但要判断父节点的反边。求 v-DCC 时要判自环,否则判孤立点时会出问题(似乎可以在判孤立点时判断,但输入时判断更简便),不用判重边和父节点。
-
求 v-DCC 时满足 \(dfn_x \leq low_y\) 时即可输出点双联通分量。求割点时当 \(x\) 为根节点时,至少要有 \(2\) 个 \(y\) 满足条件。
-
多测时清空 \(dfn\) 数组。
-
求删去一个点后会多出几个连通块时,答案不是这个点是否时割点,而是这个点被多少个 v-DCC 所包含(再减一)。
-
每一次,每一种修改都要写
pushup
, 除了建树其他都要写pushdown
(如果有懒标记的话)。(重要!重要!!重要!!!) -
空间要开的足够大,特别是可持久化线段树,线段树合并。
-
在动态开点线段树中,如果采用的是带引用地址的的写法,记得每当有新建节点的操作时都引用变量。
-
递归过程中要保持答案区间 \([l,r]\) 不变,不要手滑写成 \([l,mid+1]\) 或 \([mid+1, r]\)。
if(x <= mid)
//do sth;
if(y > mid)
//do sth;
上面第三行不要写成 else
。
- 四边形不等式不要对中间结果进行任何近似,和最大值取min等影响精确度的操作,不然会违反决策单调性。