错贴本
字符串
-
哈希进制搞质数
-
KMP 数组别开太大,否则 \({\color{Gold}{TLE}}\)
-
没有必要 \(strlen\) 的时候尽量别用
-
\(base\) 过大跑的慢
\(SPFA\)(2021/1/31)
-
return 0
别放循环里面 -
边表是注意数据类型特别是
double
!!! -
循环里尽量不要设变量去代替边表,类型会出错
-
多用
scanf
少用cin
-
多组数据 边表
head
别忘清零
二分
-
实数二分别
+1
-
有关
double
转int
的错误
cout<<a<<endl;
printf("%.f\n",a);
int s=(int)a;
cout<<s;
三者是完全不同的,第一个是按照double
随机小数位输出,第二个是四舍五入输出答案容易出错,第三个是强制类型转换,直接输出整数部分,建议最好用这个,cao,又废了我一下午2/17
差分约束(2021/2/1)
-
个人感觉跑最短路好些
-
>0
就为1,>=0
为0 -
跑 \(SPFA\) 时,判断是否联通尽量将边界开大些 例如
1e8
, 最短路如果不连通会跑无数次inf
.
\(tarjan\)(强连通分量)
-
void
类型 \(tarjan\), 别定义错了 -
一晚上的血教训,不要用边表了,用 \(vector\) 吧!!!!!!!!,TMD卡了四个题,全是 \(TLE\).
-
if(d[i] == 1) != if(d[i])
前者只有一, 后者不是零的都记录,哎~又是一晚上----2/3
\(tarjan\) (桥和割点)
-
根节点要求孩子多于两个才可,非不为就行!!!
if(child >= 2 && u == fa) cut[u] = 1;//child >= 2!!! 不是 != 0
-
根节点和非根节点的处理要注意
if(low[v] >= dfn[u] && u != fa) cut[u] = 1;// 保证不是根节点
if(fa == u) child++;// u == fa 才记录孩子
DP
-
无输出:循环节
j--
写成j++
P1049 [NOIP2001 普及组] 装箱问题 -
背包DP,\(n\) 和 \(m\) 不要搞反了
-
状态有时并非需要精确表示,如果可以通过某种方式简化位置,但却可以在使用时正确表示位置的话,那么这种答案会更优,这也就是精简式子
-
注/ 式子的化简可以通过化简来的得到,如这里的代换就是令 \(k\) 为 \(j-k\) 只要范围不变,他们就是等价的,原因是便于式子的化简!(式子的优美)
-
状压DP位运算错误
//cin
1<<3-1
(1<<3)-1
//cout
4
7
//so
//左移小于负号
KSM
x*=x%k
无法完成必须拆开x*=x; x%=k
,写错挂七个点
邻接表
- 邻接表开小居然是MLE??-->这个题
数组的大小
- 开的数据范围不要太大--这个题
2.数据范围不要开小了,f开小了
有关 \(memset\) 的赋值
1.memset(a,x,sizeof(a)
中赋值只取 \(x\) 的后四位,也就是说 0x7fffffff
赋值就是 ffff
,也就是 -1
,这样你的费用流就更加优美了