树
云帆是弟弟
import torch as tf
展开
-
【模板】倍增求LCA
int p[maxn][20]int LCA(int x, int y) { if (dep[x] > dep[y]) swap(x, y); for (int i = 20; i >= 0; i--) { if (dep[y] - (1 << i) >= dep[x]) y = p[y][i]; } if (x == y) return x; for (int i = 20; i >= 0; i--) { if (p[x][i] == p[y原创 2020-11-17 19:53:37 · 152 阅读 · 0 评论 -
【模板】树上差分
统计树上结点被访问次数:走过u、v结点间的路径,则 sum[u]++,sum[v]++,sum[LCA(u,v)]--,sum[fa[LCA(u,v)]]--int a[maxn], p[maxn][22];int fa[maxn];int dep[maxn];int dif[maxn]; // 差分int sum[maxn];int n, m, k;struct edge{ int v, next;}e[maxn<<1];int head[maxn], to原创 2020-11-17 19:48:26 · 199 阅读 · 0 评论 -
【模板】树的重心
树的重心树的重心也叫树的质心。对于一棵树n个节点的无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的结点数最小。换句话说,删除这个点后最大连通块(一定是树)的结点数最小。性质:树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个重心,他们的距离和一样。把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置。一棵树最多有两个重心,且相邻。对于无权树,以重心为根,所有子树的大小都不超过整棵树大小的一半,即原创 2020-11-03 16:14:29 · 662 阅读 · 0 评论 -
【模板】点分治
参考链接参考链接(这个讲的最清楚)// poj1741struct edge{ int v, w, next;}e[maxn*2];int head[maxn], cnt;void add(int u, int v, int w){ e[cnt].v = v; e[cnt].w = w; e[cnt].next = head[u]; hea...原创 2020-03-26 20:48:37 · 91 阅读 · 0 评论