CCF-202212-4-聚集方差
题目
前置知识
链式前向星
作用: 存储图
存储图的方法:
邻接表如下图所示:
缺点: 邻接表用数据结构不好表示
比如邻接表用vector<Node>数组表示改进: 链式前向星
邻接表用int数组代替
结点表示
1 | // 存储边的信息 |

添加
1 | inline void AddEdge(int u, int v, int w){ |

dfs序
#144.DFS 序1 思路: 链式前向星存储图,dfs遍历生成dfs序(int dfn[]),并记录每个结点及其子结点序列的左右端点(int l[], int r[]).当求结点i子树上所有结点的权值之和即为求l[i]到r[i]的w和.
1 | #include<bits/stdc++.h> |
优化:
求和部分可以使用树状数组优化.
树状数组/二叉索引树(Binary Indexed Tree)
应用:单点修改+区间查询
下标从1开始.
lowbit
1 | int lowbit(int i){ |
lowbit()返回i的二进制表示1的最低位对应的权值
比如
i=1110,i&(-i)=0010
i=1100,i&(-i)=0100
update
1 | void update(int i, int val){ |
sum
1 | int sum(int i){ |
1 | #include<bits/stdc++.h> |
树链剖分
洛谷P3379 应用:求LCA(最近公共祖先)核心:两次dfs,第一次dfs标出dep深度,siz子节点个数,fa父节点,son重儿子等信息,第二次dfs标出top重链顶端结点
1 | void dfs1(int x){ |
dsu on tree
- Title: CCF-202212-4-聚集方差
- Author: Kelvin
- Created at: 2023-02-27 00:00:00
- Updated at: 2023-05-11 21:41:13
- Link: https://yanwc.com/2023/02/27/2023-03-09-ccf-202212-4/
- License: This work is licensed under CC BY-NC-SA 4.0.