Codeforces 1215F. Radio Stations】的更多相关文章

传送门 题目看一半:"woc 裸的 $2-sat$ 白给??" 看完以后:"...???" 如果没有 $f$ 的限制,那就是个白给的 $2-sat$ 问题,但是现在有这个限制... 直接枚举 $f$ 显然不行,考虑把 $f$ 也纳入我们构建的 $2-sat$ 模型 对于某个限制在 $[l,r]$ 的站,如果我们选择了它,那么所有 $r'$ 小于 $l$ 的站和 $l'$ 大于 $r$ 的站都不能选择 所以一种暴力就是两两枚举看看是否冲突,显然还是会 $T$ 飞 考虑…
In the lattice points of the coordinate line there are n radio stations, the i-th of which is described by three integers: xi — the coordinate of the i-th station on the line, ri — the broadcasting range of the i-th station, fi — the broadcasting fre…
虽然说好像这题有其他做法,但是在问题转化之后,使用CDQ分治是显而易见的 并且如果CDQ打的熟练的话,码量也不算大,打的也很快,思维难度也很小 没学过CDQ分治的话,可以去看看我的另一篇博客,是CDQ分治的入门教程 下面是正文: 首先整理一下条件: 每个点有三个属性,x,r,f 统计有多少对点i,j满足 min(ri,rj) >= |xi-xj| 且 |fi-fj| <= k,这样的点对被称作是“坏的” 对r值取min是个烦人的条件,于是我们把点按照r值从大到小排序,按照r值从大到小的顺序依次…
大意: 给定$n$个三元组$(x,r,f)$, 求所有对$(i,j)$, 满足$i<j, |f_i-f_j|\le k, min(r_i,r_j)\ge |x_i-x_j|$ 按$r$降序排, 去掉$min$, 然后就是个裸的三维数点问题, 可以用$CDQ$分治解决. #include <iostream> #include <sstream> #include <algorithm> #include <cstdio> #include <ma…
思路:删除尽量多的边使得所有点都能在限制距离之内到达一个警局,删除边会形成多棵子树,最多只能k棵.其实就是以每个警局为根结点,把整棵树划分为以警局为根结点的k棵树,说明要删除的边的数量就是k-1条,即删除的边的条数是一定的.剩下就是为每个节点找根结点,考虑从所有警局出发得到到每个点的最短距离,则当前节点u,一定是从u->v,如果d[v] <= lim则这条边一定会保留. AC代码 #include <cstdio> #include <cmath> #include &…
Description 题面 题目大意:求一个排列 \(P\),使得 \(\sum_{i=1}^{n-1}maxflow(P_i,P_{i+1})\) 尽量大 Solution 构造出最小割树,那么第一问答案就是最小割树的边权和 之前我对最小割树都理解错了 实际上这么一个过程: 1.从当前集合中任选两个点 \((x,y)\) 作为源汇点,跑最小割,然后连边 \((x,y,maxflow)\) 2.把原集合由割边分为两个集合,递归处理,并且要把上一个集合的 \(T\),作为这个集合的 \(S\)…
题目戳这里. 我还以为是KDtree呢,但是KDtree应该也可以做吧. 这是一道数据结构好题.考虑到由于\(K \le 10\),所以我们用两个大vector--\(Left,Right\),\(Left_i\)记录频率为\(i\)的站,\(Right_i\)记录频率在\([i-K,i+K]\)之间的站.我们将\(Left_i\)里的站按其坐标来排序,\(Right_i\)里的站按其覆盖的左边界坐标排序.然后我们从左往右枚举\(Left_i\)里的元素.对于我们枚举的某个广播站\(x\),我们…
题目 比较精妙的\(\text{2-sat}\)建图了 还是按照套路把每个电台拆成\((0/1,i)\)表示不选/选 前两种连边是板子就不解释了 考虑如何限制选择一个唯一的\(f\),并且还能限制不选\(f\notin [l_i,r_i]\)的电台 考虑前缀优化建图,我们建\((0/1,i)\)表示在\([0,i]\)中不选/选某一个频率 对于这\(2\times m\)个点有一些显然的连边 \[(1,i)->(1,i+1)\] 即\([0,i]\)内启用一个频率则\([0,i+1]\)中必启用…
这道题如果没有功率的限制,显然就是一个裸的2-sat 考虑将功率的限制也放在图上:如果选择了功率i,那么功率区间不包含它的点只能不选,连边即可 但是这样建图的边数是o(n^2),需要优化 将功率区间分为两种,一种在这个点前面,另一种在这个点的后面 同样将功率也裂成两个点,分别连向这两种区间,因为功率i的第1种点一定是功率i+1的第一种点的子集,因此(i+1)1->i1和功率右区间恰好在i+1的点,同理(i-1)2->i2和功率左区间恰好为i-1的点 对图求强连通,如果裂成的两个点中在同一个强连…
Codeforces Round 585 浅论如何发现自己是傻子的-- 反正今天是完全蒙的,水了签到题就跑了-- A. Yellow Cards 签到题. 众所周知,CF的签到题一般是一道神神奇奇的数学题.思路2s出,细节一大堆-- 当然,这个做法的时间复杂度并不优秀-- #include<bits/stdc++.h> using namespace std; int a1,a2,k1,k2,n,n1,n2,mmin,mmax; int p[2010]; int main() { scanf(…