線段樹分治

將插入和刪除操作轉化成插入和末端刪除,從而使刪除變為撤銷。

最小生成樹

性質:

1.邊權為 \(w\)

2.邊權 \(\le w\)

最短路

\(dij\) 去掉堆優化後時間複雜度為 \(O(n^2+m)\) ,在完全圖下可以少帶一個 \(log\)

博弈

可以先寫一個暴力,然後加一些不是很能證明的剪枝或是特性,如果能過對拍,就是對的了(jly説的)。

並查集

離線區間可並信息查詢

如區間 \(min\) ,掃描線,並查集上記錄每個點到父親的權值,路徑壓縮的時候 \(merge\)

凸性優化

凸性證明往往用歸納法。

哈希表

常見的哈希表可以用鏈表實現,對於某個 \(id\) ,用鏈表記錄所有哈希值等於當前 \(id\)

此外,還可以在同一個列表上跳,本質上就是將鏈表全拉平,代碼會好些一些。

struct hash_map{
	ull key[M];
	int val[M];
	int &operator[](const ull n){
		int id=n%M,cnt=1;
		while(key[id]&&key[id]!=n){
			id=(id+cnt*cnt)%M;
			cnt++;
		}
		key[id]=n;
		return val[id];
	}
};

揹包

完全揹包同餘最短路做法

[國家集訓隊] 墨墨的等式

本質是存在一個 \(a_1\) 可以選任意個,那麼對於某個已經可達的 \(B\) ,有 \(B+a_1k\) 均可達。建立最短路模型, \(dis_i\) 表示對於 \(j=i+a_1k\) 中可達的最小 \(j\)。

刪除元素

對於不存在最優性(取 \(max,min\) )的揹包,可以用 \(O(V)\)