
算法
应凌云
08650
展开
-
Kruskal模板——并查集实现
int n, m; // n是点数,m是边数 int p[N]; // 并查集的父节点数组 struct Edge { // 存储边 int a, b, w; bool operator< (const Edge &W)const { return w < W.w; } }edges[M]; int find(int x) { // 并查集核心操作 if (p[x] != x) p[x] = find(p[x原创 2021-09-22 20:54:09 · 159 阅读 · 0 评论 -
递推数组初始化
init 0: n~1 00001111111 init -INF: n~1 0- - -1- - - - -原创 2021-08-28 19:16:06 · 96 阅读 · 0 评论 -
组合数性质1
2^n 111……1 101……1 000……0 ——> for( auto i : 2^n ) do Cn0 + Cn1 + Cn2 + …… + Cnn原创 2021-08-27 23:17:08 · 173 阅读 · 0 评论 -
并查集优化
1 查询的优化——路径压缩 在查询函数find_set(int i)中,查询元素i所属的集,需要搜索路径找到根结点,返回的结果是根结点。这条搜索路径可能很长。如果在返回的时候,顺便把i所属的集改成根结点,那么下次再搜的时候,就能在O(1)的时间内得到结果。 /*---未优化---*/ int find_set(int x){ //查找 return x==s[x]? x:find_set(s[x]); } /*---递归优化---*/ int find_set(int转载 2020-10-25 13:16:10 · 545 阅读 · 0 评论