随笔分类 - LCA
摘要:hdu1 04 Ball(bitset) 把所有边升序排序后,枚举中间大小的边$e$ 考虑对每个点$i$记录所有$dis(i,j)\le e$的$j$构成的集合$S_i$ 在枚举到边$(u,v,w)$时,以该边为中位数的三角形答案为$S_i \cap \bar{S_j}$ 利用bitset容易维护
阅读全文
摘要:题目大意: 一个无向图 Q个询问 每次给一些点的集合 求有多少个点满足去掉这个点后使这些点的集合中有一个点对不连通 思路: 点双缩点 相当于每次求这些点中的所有路径上的圆点个数 可以将这些点按dfs序排序 每次求a i 和 a i+1两个点路径上的圆点个数 最后答案/2 后减去这些点的个数(因为不能
阅读全文
摘要:题目大意: n个城市构成一个树 m支军队 每只军队守卫 在xi到yi的最短路径上的城市 q个重要人物从vi出发 找到离根最近的点使从vi到这个点上所有路径都可以被至少ki个军队完全覆盖 输出每个答案的点的深度 思路: 对于每个军队 可以拆成两个链 在深度较大的节点的权值线段树上把深度较低的点+1 然
阅读全文
摘要:题目大意: 棋盘上有3颗棋子,分别在a,b,c这三个位置。我们要通过最少的跳动把他们的位置移动成x,y,z 棋子是没有区别的 跳动的规则很简单,任意选一颗棋子,对一颗中轴棋子跳动 跳动后两颗棋子距离不变 一次只允许跳过1颗棋子 思路: 每个状态可以向三个状态转移 中间的向两边和两边中靠近中间的那一个
阅读全文
摘要:T1 树上路径最小值 题目大意: 带点权的树 q次询问求每两个点之间路径上最小的点权 思路: 倍增lca裸题 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstdlib> 5 #include<cstrin
阅读全文
摘要:T1 井 luogu 1550 题目大意: n个点 需要给每个点供水 在给第i个点供水需要花费v i 连接i号点和j号点 P_ij 求给所有点供水的最小代价 思路: 建立一个新节点 对所有点连接v i 边权的长度 然后跑kruskal 1 #include<iostream> 2 #include<
阅读全文
摘要:题目大意: 无向图上 每次询问两个点 寻找一条路径使这条路径上的最小值最大 思路: 先跑一个最大生成树 然后在最大生成树上每次对每两个点跑一个lca 在倍增的同时开一个数组a[i][j] 记录从i个点往上跑j条路里j条路中的最小值 然后每次lca的时候顺便记录一下就行了 1 #include<ios
阅读全文
摘要:题目大意: 一棵树上,两个相邻点之间距离为1,每次询问三个点, 求到这三个点距离和最小的点,以及这个距离和 思路: 几乎是lca裸题 lca:倍增即可 然后求出每两个点之间的lca 画画图可知必有两个lca相等 而此时答案即为另一个lca 1 #include<iostream> 2 #includ
阅读全文

浙公网安备 33010602011771号