CFR-826-Div.3解题报告
F. Multi-Colored Segments
题意:数轴上有 个线段,每个区间有一个颜色 ,对于每个线段,求与它颜色不同的线段中与它的最短距离。距离定义为两个线段中的点集最近的两个点的距离,如果相交则为 。
做法1
可以想到按颜色排序,正着扫一遍再反着扫一遍,每次维护当前颜色之前的所有颜色的贡献。
具体地,可以用两个 分别维护出现过的所有 和 的位置,每次查询在当前区间 左边的最大 和当前区间 右边的最小 。可以发现,这种做法有一个缺陷,即对于完全被包含的情况无法考虑到。于是我们可以离散化后维护一个权值树状数组,对于每个区间在 处 ,在 处 ,此时如果存在一个区间包含当前区间 ,则对应树状数组里的 的和大于 。这是充分不必要条件,但显然不会出错。
1 |
|
做法2
同样是按颜色分开考虑,先处理出上文中 维护的部分,然后再统一处理包含的情况。
对于包含的情况, 和 分开考虑,我们对于每个坐标(离散化后)预处理出以它为 的所有区间编号以及以它为 的所有区间编号。从左往右扫每个位置,用 维护包含这个位置的所有区间,当碰到 时就加入区间,碰到 时就删除区间。如果我们扫到一个 ,发现 里还有别的区间并且颜色个数多于 个,此时 里所有的区间都是有相交的,答案全部赋成 ,然后从 里删掉即可。维护颜色个数可以使用 。
By SSRS_
1 |
|
做法3
这次我们不用按颜色分开考虑。我们直接将每段区间分成两个端点,按坐标整体排序,再正反各扫一遍。以从左到右扫为例,扫的过程中维护之前区间中最近和次近的区间 及其颜色(要求这两个值的颜色不同),每次询问如果与最近颜色相同,则取次近颜色,否则取最近颜色。
By jiangly
1 |
|
做法4
暴力美学。将所有区间扔到 里,如果没有颜色限制,询问一个区间的答案是很简单的。考虑枚举每个颜色,暴力将该颜色的所有区间全部从 里删掉,然后询问该颜色每个区间的答案,最后将这些区间重新扔回 里。
By Bench0310
1 |
|
G. Kirill and Company
题意:有一个无向图,边权为 ,给你 个一型点的编号(可以重复)和 个二型点的编号(可以重复)。你需要对于每个一型点选择任意一条从 到该节点的最短路并选中该路径上所有的二型点,求最少有多少二型点没被选中(即选中尽可能多的二型点)。。
做法1
很自然的考虑状压 DP。首先预处理,令 表示 号点能否有一条路径经过 的二型点。这个可以使用一次 BFS 处理出从 到每个节点的距离 ,然后只考虑 的转移(为了保证是最短路)。统计答案时,可以使用 表示前 个一型点能否选中 的二型点。这两次 DP 的状态均为 ,转移分别为 和 ,可以通过此题。
1 |
|
做法2
由于 只有 ,可以考虑对每个二型点跑一遍 BFS,求出多源最短路,于是可以简化 DP 过程:枚举 和 ,直接判断从 经过 中的二型点到达 是否为最短路。
By jiangly
1 |
|