[usaco18Feb] New Barns】的更多相关文章

题目 P4271 [USACO18FEB]New Barns 做法 这题很长见识啊!! 知识点:两棵树\((A,B)\)联通后,新树的径端点为\(A\)的径端点与\(B\)的径端点的两点 不断加边,那就\(LCT\)维护联通块径端点就好了,两点的简单路径就是把链拉起来的子树 My complete code #include<cstdio> #include<iostream> #include<cstring> #include<string> #incl…
浅谈一下对于这题做完之后的感受(不看题解也是敲不出来啊qwq--) 题意翻译 Farmer John注意到他的奶牛们如果被关得太紧就容易吵架,所以他想开放一些新的牛棚来分散她们. 每当FJ建造一个新牛棚的时候,他会将这个牛棚用至多一条双向道路与一个现有的牛棚连接起来.为了确保他的奶牛们足够分散,他有时想要确定从某个特定的牛棚出发,到它能够到达的最远的牛棚的距离(两个牛棚之间的距离等于从一个牛棚出发到另一个之间必须经过的道路条数). FJ总共会给出QQ(1 \leq Q \leq 10^51≤Q≤…
题意 每次新建一个节点,并与一个已知节点连边.(或者不连).多次询问以某个已知点点出发的最远路径长度. 分析 显然,在任何时候图都是一个森林.由树的直径算法可知,与某点最远距的点必然是树的直径的一段.那么考虑在lct中维护直径. 实现 一篇精彩的LCT,应该像少女穿的迷你裙,越短越好.--林语堂 (误 #include <bits/stdc++.h> using namespace std; const int N=1e5+10; namespace lct { int ch[N][2],fa…
题意 给一个一开始没有点的图,有 \(q\) 次操作,每次为加点连边或者查询一个点到连通块内所有点的距离最大值. \(\texttt{Data Range}:1\leq q\leq 10^5\) 题解 跟「雅礼集训 2017 Day5」远行很像的一个题,都是 LCT 维护直径. 注意到树上一个点到其他点的距离最大值只可能在直径的两个端点处取到,而且又存在加边操作,所以可以直接使用 LCT 来维护. 当合并两个连通块的时候需要在两个连通块各自的直径端点中选两个成为新的直径,需要讨论 \(6\) 种…
部分摘抄于 FlashHu candy99 所以文章篇幅较长 请有足够的耐心(不是 其实不用学好splay再学LCT的-/kk (至少现在我平衡树靠fhq) 如果学splay的话- 也许我菜吧-LCT靠背板子 pushup靠理解-没救了/kk 简单讲讲LCT 至于树链剖分 建议在LCT之前学(? 反正我blog里也有 一[理论知识] -Link-Cut-Tree(简称LCT)是解决动态树类问题一种数据结构 -Preferred Child:重儿子,重儿子与父亲节点在同一棵Splay中,一个节点最…
题面:P4269 [USACO18FEB]Snow Boots G 题解: 把所有砖和靴子排序,然后依次处理每一双靴子,把深度小于等于它的砖块都扔线段树里,问题就转化成了求线段树已有的砖块中最大的砖块间距是否小于当前靴子间距. 代码: #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define max(a,b) ((a)>(b)?(a):(b)) u…
New Barns 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Farmer John notices that his cows tend to get into arguments if they are packed too closely together, so he wants to open a series of new barns to help spread them out. Whenever FJ constructs a new barn, he co…
题面 大意:给出n个弹弓,可以用ti的时间把xi位置运到yi,在给出m组询问,求xj到yj最小时间. sol:首先如果不用弹弓,时间应为abs(xj-yj).否则时间就是abs(xi-xj)+abs(yi-yj)+ti.这就需要拆开绝对值用线段树来维护了.大力枚举四种情况,建四次线段树,就可以过了. #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> us…
题目大意 给你\(n\)个文件的关系,求出某一个点,这个点到叶节点的长度的总距离最短.(相对长度的定义在题目上有说明) 感想 吐槽一下出题人,为什么出的题目怎么难看懂,我看了整整半个小时,才看懂. 题解 首先数据给我们的是一棵树,一开始我审题不仔细以为是到每个节点的距离最短,就以为是要求树的重心.后来发现不对,而且节点之间的距离不怎么好处理,因为以不同的节点为起点,两节点之间的距离是会变化的.需要用树形dp来解决这个问题,首先预处理出以\(u\)为根节点的子树中有多少个叶节点,因为每一个相对路径…
题解 先吐槽一波题目:便便传送门,出题人还真的有一点厉害的滑稽. 废话不多说. 首先问题的本质就是求如果当这个传送门的端点位于\(y\)的时候,最小的求出总代价,我们设为函数\(f(y)\). 因为这个\(f(y)\)是一个具有分段线性的结构函数,我们就在求\(f(y)\)的时候遍历\(y\),就可以了.每次当我们处理到两段函数的交界处时,我们就算出两个函数的斜率,算出其中的最小值. 因为有\(n\)个点,那么复杂度就是\(O(n)\),但是一开始我们的各个点的顺序不定,那么我们需要花\(O(n…