XIX Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia, Division 1
Contest Info
date: 2018.11.30 18:31-23:31
Solutions
A. Trampler
签到题
C. Package
题目大意:有 \(n(n\leq 200)\) 个应用程序,每个应用程序有一些版本。给出 \(k(k\leq 500)\) 个限制条件,每个限制条件是一个 (应用程序,版本)的集合,表示这些选择互斥。保证特定应用程序的特定版本只在限制条件中最多出现一次,现在让你给每个应用程序指定一个版本,且不互斥。输出方案。
题解:对于存在版本不被限制的应用程序,我们选择它的一个没被限制的版本即可。然后建一个网络流,源点向限制条件连边,限制条件向它的应用程序连边,应用程序向汇点连边。跑最大流。
D. Vasya’s graph
题目大意:
给出\(n\le10^5\)顶点间的\(k\le10^5\)对关系,之后依次给出\(m\le10^5\)个加边的申请,如果加入这条边不会使得任意一对关系的两个点连通,则可以加,否则不加,输出成功的加边编号。
题解:
用并查集维护连通性,同时用一个std::unorderd_set
存储不可以合并的集合关系。
当加边的时候,并查集find
到两个顶点的根,如果在set
中没有查到,就可以合并,否则不行。
合并的时候采用启发式合并,将小的集合中的禁止关系更新后插入set
。
时空复杂度\(O(n\log{n})\).
E. Quadratic equation
签到题。
F. Alignment
简单贪心、\(dp\),正确理解题意即可。
G. Rocket
题目大意:火箭有 \(n\) 个部分,每个部分有一些候选的金属材料,质量 \(m_i\),花费 \(c_i\)。对于每个部分,你可以选择候选金属材料中的一个,或者两个来组成合金,同时你还要选一个参数 \(\alpha\),合金的质量为 \(\alpha m_1+(1-\alpha) m_2\),花费为 \(\alpha c_1+(1-\alpha)c_2\)。总质量不能超过 \(M\),求最小的花费。输出方案。
题解:对于每个部分,我们对金属材料 \((m,c)\) 求凸包,那么可选的金属只会在左下凸壳上。合金显然就是凸壳顶点之间的边。我们初始选择每个凸壳的最左顶点,然后把每个凸壳的第一条边放入优先队列,贪心的选择斜率最小的一条边去增大质量。显然最后的方案只会有最多一个合金。
H. Cabbage
二分。
K. Ecliptic
简单空间解析几何。