數論
- 線性篩素數、歐拉函數
- 質因數分解
- 最大公約數&最小公倍數
- 擴展歐幾里得算法
- 線性同餘方程+中國剩餘定理
- 矩陣乘法
- 高斯消元
- 組合計數
- 容斥原理
- 概率&數學期望
- 0/1分數規劃
質因數分解:
N的正約數的和爲:
歐拉定理的推論:
許多計數類問題要求我們把答案對一個質數p取模後輸出。
面對a+b,a-b,a*b,直接在計算前對p取模
a/b,則直接變化做,對b求逆元
,則先把底數對p取模,再把指數對取模(前提:gcd(a,p)=1)
**若gcd(a,p)!=1,則
存在逆元的條件:
特別地,當P爲質數的時候,x不能是P的倍數
例題SumdivPOJ 1845
異或的性質:
如果a^b^c=e
則有 a=e^b^c
這樣用高斯消元解異或方程組的時候就很妙了
組合計數:
常用性質
圖論
- 最短路(Dijkstra,SPFA,Floyd)
- 最小生成樹
- 樹上操作(樹的直徑、LCA)
- 基環樹
- 負環+差分約束
- Tarjan
- 歐拉路
- 2-SAT
- 二分圖匹配
- 網絡流
最短路
- 最短路計數【√】
- 次短路【√】
- K短路【√】
- 傳遞閉包【√】
- 最小環【√】
無向圖の最小環:核心代碼
for(re int k=1;k<=n;++k){
for(re int i=1;i<k;++i)
for(re int j=i+1;j<k;++j){
if(ans>dis[i][j]+a[i][k]+a[k][j])
ans=dis[i][j]+a[i][k]+a[k][j];
}
for(re int i=1;i<=n;++i)
for(re int j=1;j<=n;++j){
ll tmp=dis[i][k]+dis[k][j];
if(tmp<dis[i][j]){
dis[i][j]=tmp;
pos[i][j]=k;
}
}
}
Floyd這個亂搞求最短路!!根本無法求次短路好伐。所以自己yy的那個做法是不可以的,但正確性應該是可以保證的
有向圖の最小環:可以枚舉起點s,然後求單源最短路徑。s一定是最先從堆中取出來的,掃描s的出邊進行擴展,然後將,繼續擴展。當s第二次從堆中取出來的時候,答案就是
最短路計數:果然不能輕視模板啊!!打掛n次。
第一次發現dij板子打錯,粗心忘了標記vis(一般是不會有太大問題的,但是恰恰是計數,問題就很大了)
第二次發現cnt記錯了,應該對於每個點都記錄一下,而不能所有點的答案累加(oh,such a crazy girl)
第三次發現題目有重邊
第四次發現這居然是個有向圖(我要死了)
次短路:
最小生成樹
- 最小生成樹計數【√】
- 次小生成樹【√】
可能還需要複習博弈論,分塊