06 2022 档案

摘要:例题:洛谷P4178 Tree 题意:求树上 k 的路径条数 点分治: 1·分治 从整棵树开始,不断分下去,每次统计过当前根节点的答案。 inline void dfs(int u, int SZ) { vis[u] = true; //记录vis ans += getans(u, 阅读全文
posted @ 2022-06-25 16:57 Faker_yu 阅读(30) 评论(0) 推荐(0) 编辑
摘要:一、树的重心的定义: 在一棵树中,如果我们选择某个结点为根,可以使得它的所有子树中最大的子树最小,那么这个结点就被称作这棵树的重心。 二、树重心的性质: 1.以重心为树根时,所有子树的大小不超过全树大小的一半。 2.如果树的所有边权都为1,那么树中所有点到某个点的距离和中,到重心的距离和是最小的;如 阅读全文
posted @ 2022-06-25 11:18 Faker_yu 阅读(844) 评论(0) 推荐(0) 编辑
摘要:遍历: inline void dfs(int u) { sz[u] = 1; dep[u] = dep[fa[u]] + 1; int v; for(int e = hd[u]; e; e = nt[e]) { dfs(v = to[e]); sz[u] += sz[v]; if(sz[v] > 阅读全文
posted @ 2022-06-25 10:41 Faker_yu 阅读(12) 评论(0) 推荐(0) 编辑
摘要:一、树的直径的定义:最长的一条链。 二、求法 1.两次bfs(或者dfs)求树的直径 优点:可以求出路径。 缺点:时间复杂度O(2*N), 在负权边中无法使用。 方法:先从任意一点出发,找离它最远的点P,再从点P出发,找离它最远的点Q,P到Q的距离就是树的直径。 代码: inline void df 阅读全文
posted @ 2022-06-25 08:38 Faker_yu 阅读(43) 评论(0) 推荐(0) 编辑
摘要:inline void dfs(int u, int f) { fa[u][0] = f; dep[u] = dep[f] + 1; for(int i = 1; i <= 26; ++i) fa[u][i] = fa[fa[u][i - 1]][i - 1]; int v; for(int e = 阅读全文
posted @ 2022-06-25 08:28 Faker_yu 阅读(25) 评论(0) 推荐(0) 编辑
摘要:tarjan 大合辑 1.割边: #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10, M = 1e6 + 10; int hd[N], nt[M], to[M], tot = 1;/////// tot = 阅读全文
posted @ 2022-06-03 11:53 Faker_yu 阅读(20) 评论(0) 推荐(0) 编辑
摘要:洛谷P2680 运输计划 题意:给一棵 n (n3×105) 个点的带权树, m (m3×105) 条路径。求某条边权值变为 0 后,所有路径长度的最大值,所有边这样搞的最小值。 做法:最小的最大,二分答案。二分最大 阅读全文
posted @ 2022-06-03 08:59 Faker_yu 阅读(17) 评论(0) 推荐(0) 编辑
摘要:洛谷P5283 异或粽子 题意:给出长为 n (n5×105) 序列,显然有 n×(n+1)2 个区间。求区间异或和前 \(k~(k \le min(\frac{n \times(n - 1)}{2},2 \times 1 阅读全文
posted @ 2022-06-03 08:40 Faker_yu 阅读(31) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示