易错点小结
零.整体把握(基本语法)
1.初始化函数别忘了打
 2.占位符和变量类型不一样时,可能会出现乱码
 3.
    
     
      
       
        1
       
       
        <
       
       
        <
       
       
        32
       
       
        l
       
       
        l
       
      
      
       1 << 32ll
      
     
    1<<32ll 会溢出,
    
     
      
       
        1
       
       
        l
       
       
        l
       
       
        <
       
       
        <
       
       
        32
       
      
      
       1ll << 32
      
     
    1ll<<32 才不会溢出
 4.打少的通常是 exit(0) 之类的比较少用的函数的头文件(血的教训)
 5.内存计算(K) :数组大小 * 类型大小 / 8 / 1024
 6.宏定义和函数有差别,函数传参如果是式子,则会先计算出式子结果再传入,而宏定义却是直接替代掉了。
 7.负数 / x 的时候是向 0 取整而非向下取整
 8.浮点数有误差 
    
     
      
       
        e
       
       
        .
       
       
        g
       
       
        .
       
       
         
       
       
        0.01
       
       
        ∗
       
       
        3
       
       
        =
       
       
        0.029999999...
       
      
      
       e.g.~0.01 * 3 = 0.029999999...
      
     
    e.g. 0.01∗3=0.029999999...
 9.然而 
    
     
      
       
        d
       
       
        o
       
       
        u
       
       
        b
       
       
        l
       
       
        e
       
      
      
       double
      
     
    double 强转 
    
     
      
       
        i
       
       
        n
       
       
        t
       
      
      
       int
      
     
    int 是向 
    
     
      
       
        0
       
      
      
       0
      
     
    0 舍入而不是向下。
 10.printf ("%.5f",0); 
    
     
      
       
        ≠
       
      
      
       \neq
      
     
    = printf (“0.00000”);
 11.Push_Down() 里面要写 if (!p) return;
一.dp
1.树型dp
背包树形 
    
     
      
       
        d
       
       
        p
       
      
      
       dp
      
     
    dp 第二维一定要从小到大枚举(
    
     
      
       
        k
       
       
        =
       
       
        0
       
      
      
       k = 0
      
     
    k=0 时 
    
     
      
       
        j
       
       
        =
       
       
        j
       
       
        −
       
       
        k
       
      
      
       j = j - k
      
     
    j=j−k)
 即: 
    
     
      
       
        C
       
       
        h
       
       
        a
       
       
        n
       
       
        g
       
       
        e
       
       
        (
       
       
        d
       
       
        p
       
       
        [
       
       
        u
       
       
        ]
       
       
        [
       
       
        j
       
       
        ]
       
       
        ,
       
       
        d
       
       
        p
       
       
        [
       
       
        u
       
       
        ]
       
       
        [
       
       
        j
       
       
        −
       
       
        k
       
       
        ]
       
       
        +
       
       
        d
       
       
        p
       
       
        [
       
       
        v
       
       
        ]
       
       
        [
       
       
        k
       
       
        ]
       
       
        )
       
       
         
       
       
        (
       
       
        k
       
       
        =
       
       
        0
       
       
        )
       
      
      
       Change (dp[u][j],dp[u][j - k] + dp[v][k])~ (k = 0)
      
     
    Change(dp[u][j],dp[u][j−k]+dp[v][k]) (k=0)
 如果从大到小枚举 
    
     
      
       
        d
       
       
        p
       
       
        [
       
       
        u
       
       
        ]
       
       
        [
       
       
        j
       
       
        −
       
       
        k
       
       
        ]
       
      
      
       dp[u][j - k]
      
     
    dp[u][j−k] 的值就被更新过了
二.图论
1.最短路
① Floyd
    
     
      
       
        F
       
       
        l
       
       
        o
       
       
        y
       
       
        d
       
      
      
       Floyd
      
     
    Floyd 第一维为 
    
     
      
       
        k
       
      
      
       k
      
     
    k
 
    
     
      
       
        F
       
       
        l
       
       
        o
       
       
        y
       
       
        d
       
      
      
       Floyd
      
     
    Floyd 记得去重边
2.网络流
①最大流
②最小割
最小割的概念:在有向图上,分出两个点集 S , T S, T S,T, ∣ f ∣ = ∑ s ∈ S , t ∈ T c [ s ] [ t ] |f| = \sum_{s \in S, t \in T} c[s][t] ∣f∣=∑s∈S,t∈Tc[s][t] (注意是有向图,且边权算的是容量)
三.数据结构
当每个点的答案都是对的,但区间的答案是错误的时候,不一定是 P u s h U p PushUp PushUp 写错了,也有可能是 P u s h D o w n PushDown PushDown 写错了。
1.RMQ
Q u e r y Query Query 时记得加一 ( f [ r − ( 1 < < k ) + 1 ] [ k ] f[r - (1 << k) + 1][k] f[r−(1<<k)+1][k])
2.平衡树
①. fhq treap
    
     
      
       
        R
       
       
        a
       
       
        n
       
       
        k
       
       
        S
       
       
        p
       
       
        l
       
       
        i
       
       
        t
       
      
      
       RankSplit
      
     
    RankSplit 时注意等号
 
②. 旋转 treap
f i x fix fix 值记得取模,不同系统 r a n d ( ) rand () rand() 的范围不一样
3.树链剖分
树链剖分向上跳时的条件写成了 dep(深度),应该是 dfn(时间戳)。
4.线段树
线段树的查询区间出现 r < l r < l r<l 的情况
解决方案:
- 在 4 4 4 倍空间的基础上再开大 2 2 2 倍
- 判断 r < l r < l r<l
四. 基本算法
1.分块(莫队)
分块 T T T 了 Q A Q QAQ QAQ:①: S i z e Size Size 没选好 ②:计算 S i z e Size Size 的时候溢出了
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号