随笔分类 -  ACM / 图论 LCA

摘要:原题链接 考察:LCA+二分答案 这题也太难想了,本蒟蒻完全不会QAQ 思路: 树上建边,然后每个任务都是一个查询,我们可以利用LCA求出树上任意两点的时间和.这道题要求去除一条边后最小的最大值. 两个最字很容易想到二分答案.假设二分答案为mid.对于每一个任务,检测它的时间是否会>mid.如果会统 阅读全文
posted @ 2021-05-12 13:49 acmloser 阅读(73) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树上差分 思路: 点差分.区别在于中间点多+了1.注意不能在dfs前对差分数组-1.这样会导致递推错误.比如下图: 1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 using namespace std; 阅读全文
posted @ 2021-05-12 09:39 acmloser 阅读(54) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:树上差分 思路: 点差分模板题.定义d[i] 为某路径上经过i的次数. 1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 using namespace std; 5 const int N = 50010 阅读全文
posted @ 2021-05-12 01:13 acmloser 阅读(59) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:LCA+最大生成树 思路: 实际是求两点之间最大的最短边.这样很容易想到二分,但是直接二分会TLE. 然后又会想到次小生成树,但是这道题边不能构成树.由于我们要的边尽量大,可以考虑贪心一波建立最大生成树.然后求两点之间的最小距离直接套LCA倍增板子.这题比次小生成树省事. 时间复杂度 阅读全文
posted @ 2021-05-11 23:45 acmloser 阅读(101) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:LCA 思路: md想到了两两求lca但是没敢继续想下去...我是sb 最近公共祖先一定是对u,v来说最近的,但是对于第三个点需要两两枚举求最小值. 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 阅读全文
posted @ 2021-05-11 21:02 acmloser 阅读(51) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:LCA + 枚举 完全不会...LCA真难.... 思路: 很容易看出两个分为两段的方式: 附加边加上成环后,环上去掉一个树边和一个非树边. 未成环的树边去掉一个边,然后任意去掉一个非树边. 设d[x] 表示 x点到其父节点的边上要去掉d[x]条非树边才断. 考虑枚举非树边,对于非树 阅读全文
posted @ 2021-05-11 14:03 acmloser 阅读(44) 评论(0) 推荐(0) 编辑