二分答案
seeeagull
这个作者很懒,什么都没留下…
展开
-
[cf150E] Freezing with Style(点分治+二分)
这个中位数显然可以通过二分来确定。检验的方法就是把边权大于等于检验值的设为1,小于的设为-1,看是否有一条路径边权和大于等于0。 关于长度的限制则可以用点分治。对于节点u,先把它的子节点按子树从小到大排序,保证复杂度,开个桶记录一下长度为d的边最大的权值bkt[d].w,以及其端点bkt[d].x,然后逐一合并。到子树v时,先dfs一下,求出子树内的不同长度下最大权值,用t1数组记录一下,然后对于t1内每个值,需要寻找一个滑动区间内的最大值,类似于单调队列的思路。若没有找到可行解则把t1合并到bkt中,再原创 2020-09-04 12:22:57 · 154 阅读 · 0 评论 -
[poj2296]Map Labeler(二分答案 + 2-SAT)
由于每个点只可能位于正方形上边中点或下边中点,考虑2-SAT。我们可以按纵坐标升序给点排个序。若已知正方形边长为x,首先如果两个点横坐标差大于x,那么无论如何也不会覆盖。否则,计算两点纵坐标之差:1.为0,则必一上一下 2.大于0且小于x,则只能前一个点向下盖,后一个点向上盖 3.大于x小于2*x,则前一个点向上盖时,后一个必向上;后一个向下时,前一个必向下 点的个数不多,二分法每次验证一个值可不可行时通过枚举点对重建一次图。 #include<cstdio> #include<..原创 2020-08-17 22:54:13 · 86 阅读 · 0 评论 -
[AT2336] Flags(二分答案+2-SAT+线段树优化建图)
首先看出可以二分出距离,然后2-SAT判断是否可行。但建图时需要枚举每组节点,复杂度O(n²),且最多n*(n-1)/2条边,空间也开不下。如果现将2*n个位置排序,那么对于排序后第i个点,和它距离小于一个值的点分别在它左边和右边的两个连续区间内,于是可以线段树优化建图。 建树时首先将每个节点向其父亲连边,代表子区间内的点一定在更大的区间里。然后枚举点,二分求出和 i 距离小于一个值的区间的端点...原创 2019-05-12 17:08:09 · 254 阅读 · 0 评论