专题相关技巧

线段树分治

将插入和删除操作转化成插入和末端删除,从而使删除变为撤销。

最小生成树

性质:

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)\) 的复杂度删除一个元素的贡献。注意到背包可以视作多个少项式的卷积,删除一个元素的本质就是删去一个少项式,也就是多项式除法,这显然是可做的。

posted @ 2025-11-19 21:56  liduoduo2021  阅读(0)  评论(0)    收藏  举报