算法-虚树
Maxwei_wzj
AFO
展开
-
【BZOJ2286】消耗战(SDOI2011)-虚树+树形DP
测试地址:消耗战 做法:本题需要用到虚树+树形DP。 这题如果只有一个询问,相信大家都会做了,比较裸的树形DP。但是询问次数很大,每次询问都O(n)O(n)O(n)DP的话,总的时间复杂度就是O(nm)O(nm)O(nm),无法承受。但是我们发现,总共涉及的询问点数不大,那么我们迫切需要一个关于kkk而不是关于nnn的算法。这时候就要拿出大杀器——虚树了。 虚树其实应该不算是一种数据结构,它...原创 2018-03-07 11:27:35 · 277 阅读 · 0 评论 -
【BZOJ3572】世界树(HNOI2014)-虚树+树形DP
测试地址:世界树 做法:本题需要用到虚树+树形DP。 首先一看这道题我们就知道要用虚树,因此我们先把询问点的虚树先建出来,然后考虑DP。 我们把虚树中每个点受哪个点管辖先求出来,这是通过两次DFS来完成的,一次处理向下方向的最近,一次处理向上方向的最近。然后对于每条虚树上的边,如果边的两端所属的点不同,则表示这条边需要切断,那么我们可以倍增求出断点,在每次切断时求出较下面的那一块的大小即可。...原创 2018-03-07 21:45:24 · 289 阅读 · 0 评论 -
【BZOJ5329】战略游戏(SDOI2018)-圆方树+虚树
测试地址:战略游戏 做法:本题需要用到圆方树+虚树。 显而易见的是,两个点之间路径的必经点,就等于它们之间路径上的所有割点。因此我们很快想到建出圆方树,这样两点间路径上所有的圆点(除去两端)就是对应的割点。而询问一个集合,问能切开集合中某两个点的所有点,那就是求所有这些点两两之间路径的并,答案就等于并集中圆点的数目减去询问集合的大小(因为询问集合内的点不能算作答案)。 树上一个点集两两之间路...原创 2018-06-19 20:03:07 · 212 阅读 · 0 评论 -
【CF966E】May Holidays-分块+虚树
测试地址:May Holidays 题目大意:一个nnn个人的公司,除了111号外每个人都有一个直属上司,uuu为vvv的下属当且仅当uuu的直属上司是vvv或uuu的直属上司是vvv的下属。每个人都有一个承受阈值titit_i,当一个人的下属中有严格大于titit_i个人休假而他没有休假时,他就会不开心。mmm次操作(改动一个人的休假状态),求每次操作后不开心的人数。 做法:本题需要用到分块...原创 2018-08-22 19:57:35 · 466 阅读 · 0 评论 -
【BZOJ4912】天才黑客(SDOI2017)-最短路+虚树+线段树优化建图
测试地址:天才黑客 做法:本题需要用到最短路+虚树+线段树优化建图。 本人好像使用了本题最经典,但是也最难写,时间复杂度最高,也很丑的做法。但是作为本人接触线段树优化建图这种方法的第一道题,本人还是十分坚强地写出了本人OI生涯中最长的一份代码(长达6.2KB)。 首先简化题意,题目给出一张有向图,每条边上有一个字符串,是一棵给定的trie中能匹配的一个串,一条路径的代价是:每条边的边权之和,...原创 2018-09-04 22:06:05 · 401 阅读 · 0 评论 -
【CF891C】Envy-最小生成树+虚树+并查集
测试地址:Envy题目大意: 给定一个带权无向连通图,每次询问给出kik_iki条图中的边,问这些边能不能同时处在这个图的一棵最小生成树中。做法: 本题需要用到最小生成树+虚树+并查集。居然没看题解想出来了这道神题,非常开心。首先,判断kkk条边是不是能同时在最小生成树中,实际上只要求出包含这些边的边权和最小的生成树的权值,再和最小生成树比对即可。怎么求呢?首先把kkk条边先连上,形成...原创 2018-10-17 09:36:13 · 362 阅读 · 0 评论