备 忘 录

  • 近日,某蒟蒻在校测中多次犯烧杯错误,再加上本身实力有限,于是多次垫底,便有了这篇博客。
  • 没开long long
  • 数组开小/开大
  • 未考虑图中的自环、重边
  • 多层循环混用i,j等变量
  • 未考虑图不连通的情况
  • 无负权边的图中跑SPFA
  • 忽略逻辑运算符优先级顺序

小括号() > 逻辑非 ! > 乘、除、取模 > 加减 > 移位(>><<) > 按位与& > 按位异或^ > 按位或| > 逻辑与 && > 逻辑或 || > 三目运算符 >赋值=
不清楚的话疯狂加括号就行了

  • 未初始化(特别是多组数据未清零)

  • 混用n,m等常用变量,看错输入顺序

  • 仔细审题,注意考察题中某些变量的可选范围,注意0、-1等边界或者注意可选范围是否包含字母/数字/下划线。

  • 注意输出时严格按照题目说明输出

  • 漏看了题目中的取模

  • 未删除调试信息

  • 文件名打错

  • 没开 unsigned long long、没特判 1<<64

  • 1uunsigned int,1ullunsigned long long

  • 一些有返回值的函数无返回值

  • 直接用 .size() 函数和 int 比较会出锅,这导致我CF1119F调了一晚上。

  • 不要将点双边双以及强连通分量的缩点方法弄混!具体参见这里

  • 注意模数,当模数不为质数时,无法使用费马小定理求逆元

  • const long long inf=1e18+2 由于精度问题会被视作 1e18

  • atan2(y,x) 的返回值是 (π,π]

  • 单点修改维护全局乘法时,可能会出现某个数为模数的倍数,然后修改时就无法直接求逆,这时可以考虑用线段树进行维护。

  • 在模数为质数,无法使用逆元时,可以辗转相除法作高斯消元,这里以求行列式的代码为例:

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
inline int matrix_tree(int n){ int ans=1; for(int i=1;i<=n;++i){ if(!c[i][i]){ for(int j=i+1;j<=n;++j) if(c[j][i]){swap(c[i],c[j]);ans=dec(0,ans);break;} } for(int j=i+1;j<=n;++j){ while(c[j][i]){ int d=c[i][i]/c[j][i]; for(int k=n;k>=i;--k) c[i][k]=dec(c[i][k],c[j][k]*d%mod); swap(c[i],c[j]);ans=dec(0,ans); } } ans=ans*c[i][i]%mod; } return ans; }
  • 强连通分量缩点:若 v 被遍历过但在栈中则用 dfn[v] 更新 low[u],当 dfn[u]=low[u] 时形成一个强连通分量,一直弹出栈顶直到弹出 u 后结束。

  • 边双连通分量缩点:与强连通分量缩点唯一的不同在于如果 v=fau 则不遍历 v

  • 点双连通分量缩点:这回在栈中需要存的是边,因为割点会在多个点双中出现,而边不会,于是每当遍历到新的边 (u,v) 时都将 (u,v) 加入栈中,同时如果 lowvdfnu,即 u 是割点时进行缩点,不断弹出栈顶直到弹出边 (u,v) 后结束

  • 当转移是乘法时( xix ),很多时候只关心 n/x 的值。

  • 。。。

posted @   cjTQX  阅读(240)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开