图论 —— LCA
文章平均质量分 50
图论 —— LCA
c4Lnn
这个作者很懒,什么都没留下…
展开
-
牛客小白月赛13 F. 小A的最短路
链接https://ac.nowcoder.com/acm/contest/549/F题意在边权为 111 的树形图上增加一条边权为 000 的边,现在有 q(1≤q≤1e6)q(1 \le q \le 1e6)q(1≤q≤1e6) 次询问,每次询问两点间的最短距离思路首先先不考虑多出来的一条边,那么 dep[u]dep[u]dep[u] 表示点 uuu 的深度,任意两点 u,vu,vu,v 的最短的距离就是 dep[u]+dep[v]−2dep[lca(u,v)]dep[u]+dep[v]-2d原创 2021-02-04 22:05:33 · 73 阅读 · 0 评论 -
洛谷 P4180. 严格次小生成树
链接https://www.luogu.com.cn/problem/P4180题意求严格次小生成树思路先求出最小生成树记不在最小生成树里的边为非树边,在最小生成树上添加一条非树边会使这条边的两端 x,yx,yx,y 形成一个环若这条非树边大于 xxx 到 yyy 的路径上的最大边,那么可以替换它,现在的这颗树就是候选次小生成树若这条非树边等于 xxx 到 yyy 的路径上的最大边,那么可以替换路径上的次大边,现在的这颗树就是候选次小生成树因此我们只需要求出每条路径上的最大边和次大边即可原创 2020-07-30 01:13:34 · 129 阅读 · 0 评论 -
LibreOJ 10132. 异象石
链接https://ac.nowcoder.com/acm/problem/51256题意树形图上有三种操作:操作 1:某个点被标记操作 2:某个点被取消标记操作 3:求所有被标记的点连通的边集的最小值总共有 mmm 个操作思路将所有的点按照dfs序排序,易发现相邻两点的路径长度之和(首尾相连)恰好是答案的两倍用 setsetset 按照dfs序大小维护被标记的点标记点 xxx :ans+=path[l][x]+path[x][r]−path[l][r]ans+=path[l][x]+原创 2020-07-29 23:53:13 · 184 阅读 · 0 评论 -
LibreOJ 2359. 天天爱跑步
链接https://www.luogu.com.cn/problem/P1600题意树形图上有 mmm 个玩家,从 sss 走到 ttt每个节点都有一个观察员节点 xxx 的观察员在第 www 秒观察玩家,若某个玩家在第 www 秒正好走到节点 xxx,则这个玩家被节点 xxx 的观察员观察到求所有节点的观察员能够观察到的玩家的总数思路树上差分每个玩家的路径可以分为两部分:s∼lca(s,t)s \sim lca(s,t)s∼lca(s,t) 和 lca(s,t)∼tlca(s,t) \s原创 2020-07-29 21:46:56 · 158 阅读 · 0 评论 -
黑暗爆炸 3307. 雨天的尾巴
链接https://www.luogu.com.cn/problem/P4556题意树形图上每次分配给 aaa 到 bbb 路径上的所有点一个 zzz 类物品,分配 mmm 次,求每个点拥有最多的物品的种类思路树上差分+权值线段树合并设 ccc 数组为每个节点拥有每类物品的计数数组设 bbb 数组是差分后的计数数组对于每次分配,让 b[x][z]b[x][z]b[x][z] 加 111 ,b[y][z]b[y][z]b[y][z] 加 111 ,b[lca(x,y)][z]b[lca(x,y原创 2020-07-29 14:10:33 · 197 阅读 · 0 评论 -
POJ 3417. Network
链接http://poj.org/problem?id=3417题意树形图上另添 mmm 条附加边,求第一次删去一条主要边,第二次删去一条附加边后树被分割成来两部分的方案数思路树上差分 + LCA每条附加边构成了一个环,使这个环上所有的主要边都被覆盖了一次若一条主要边被覆盖了 000 次,那随便删掉一条附加边,即满足要求若一条主要边被覆盖了 111 次,那么删法唯一若一条主要边被覆盖了 ≥2\ge 2≥2 次,无法满足要求我们给每个点增加一个权值 ddd,在 x,yx,yx,y 间加一条原创 2020-07-29 14:07:34 · 84 阅读 · 0 评论 -
HDU 2586. How far away ?
链接http://acm.hdu.edu.cn/showproblem.php?pid=2586题意多次询问,求树形图上两点间距离思路一树链剖分将一个点与其拥有子树节点数目的节点相连,形成一条重链,一颗树最多有 lognlognlogn 条重链当 xxx 和 yyy 不在一条重链上时,将所在链顶点深度大的那个点往上跳,直到在一条链上时间复杂度:O((n+m)logn)O((n+m)logn)O((n+m)logn)代码#include<bits/stdc++.h>using原创 2020-07-29 00:33:46 · 112 阅读 · 0 评论