• 杂题20200906


    CF1400G Mercenaries

    (n) 个人和 (m) 个敌对关系,第 (i) 个人有一个条件区间 ([l_i, r_i])

    定义一种从 (n) 个人中选一个非空子集 (S) 的方案是合法的,当且仅当 (forall iin S, exists l_ileq|S|leq r_i) ,且 (S) 中的人互不敌对

    求合法的选择方案 (mod 998244353) 的值

    • (nleq3 imes10^5)
    • (mleq20)

    考虑 (m=0) 时的做法

    枚举 (S) 的大小,记 (cnt_k=displaystylesum_{i=1}^n[l_ileq kleq r_i]) ,则答案等于 (displaystylesum_{i=1}^ndisplaystyleinom{cnt_i}i)

    (m eq0) 时,考虑容斥

    对于容斥集合 (T) ,找到存在于 (T) 的限制包含了哪些人,设人数为 (x) ,求出有多少种 (S) 的方案完全包含了这 (x) 个人,容斥系数为 ((-1)^{|T|})

    (S) 方案数时,显然 (|S|) 的范围只能是这 (x) 个人的区间的交集 ([L, R]) ,且这 (x) 人必选,故答案为 (displaystylesum_{i=L}^Rinom{cnt_i-x}{i-x})

    注意到 (x) 不会超过 (40) ,对每种 (x) 预处理组合数前缀和即可


    一道题

    给定一棵带边权树,第 (i) 个点有点权 (a_i)

    (dis(u, v)) 为树上节点 (u)(v) 的最短路边权之和

    你可以从任意点出发,每次选择任意点作为目标,并沿最短路(边权和为 (k) )走到目标,你可以走任意步,在任意节点结束

    定义一种方案的收益为,所有至少访问过一次的点的点权和,乘以整个过程中 (k) 的最小值

    求得到的收益的最大值。

    (nleq2 imes10^5)

    假设树的直径之一是 ((x, y)) ,存在结论:距离树上每个点 (u) 最远的点之一,一定是 (x, y) 中较远的那一个

    可以通过反证法证明

    因此记 (d_i) 为节点 (i) 到树上距离它最远的点的距离

    将所有点按 (d_i) 降序排序,记 (v_i=displaystylesum_{i=1}^na'_i) ,其中 (a'_i) 是以排序顺序为编号的点权

    则答案为 (displaystylemax{v_i imes d_i}) ,即枚举 (k) 的最小值


    CF1403B [CEOI2020] Spring cleaning

    给定一棵 (n) 个点的树

    按照如下方式定义一棵树的代价:

    • 若该树有奇数个叶子,代价为 (-1)
    • 否则将偶数个叶子两两匹配,定义一个匹配方案是合法的,当且仅当对于每条边都至少存在一个 (i) 满足匹配 ((x_i, y_i)) 的最短路包含了这条边。每个匹配 ((x_i, y_i)) 的代价为 (x_i, y_i) 在树上的最短路经过的边数,一种合法的匹配方案的代价即为每个匹配的代价之和,一棵树的代价为所有匹配方案中代价最小的那个

    (q) 次询问,每次给定 (D_i) 个点(可以相同),给每个点增加一个叶子,求新树的代价,询问独立

    (n, qleq10^5)

    随意选一个非叶子节点 (rt) 作为根

    (d_i) 为第 (i) 个点到 (rt) 经过的边数,一条边被经过的次数为由多少个匹配 ((x_i, y_i)) 的最短路上包含了这条边

    对于两个叶子 (x, y) ,将它们匹配的代价为 (d_x+d_y-d_{lca(x, y)}) ,我们需要最大化 (d_{lca(x, y)})

    考虑一个自底向上的过程,对于点 (u) ,已知它的所有儿子 (v) 的子树中,有哪些叶子(至少一个)还没在子树内部匹配

    由于需要最大化 (d_{lca(u, v)}) ,我们会尽量将 (u) 子树中未匹配叶子放在 (u) 处匹配,而 (u) 向父亲的边又至少需要经过一次,因此 (u) 到父亲的边要么被经过一次,要么被经过两次,而经过两次的条件是, (u) 的子树内恰好有偶数个叶子

    因此随便树剖或者虚树即可

    另一种思考方式:

    考虑从边的角度计算贡献

    假设一条边被经过了两次以上

    我们随意拿出经过它的匹配中的三个,假设为红黄绿

    我们可以将黄绿部分重新匹配

    但是可能会有这种情况,将黄绿路径重新匹配后,可能会有一些边不再被经过

    但这个时候可以将红黄路径重新匹配,避免了该问题

    因此得到结论:每条边至多被经过两次

    我们的目标就是最小化被经过两次的边的数量

    而这个时候再考虑之前自底向上的构造即可


    CF1396D Rainbow Rectangles

    一个 (L imes L) 的矩形上有 (n) 个点,有 (k) 种颜色,第 (i) 个点坐标为 ((X_i+1, Y_i+1)) ,颜色为 (C_i (1leq C_ileq k))

    求有多少个以 ((r_1, c_1)) 为左上角, ((r_2, c_2)) 为右下角( (1leq r_1leq r_2leq L; 1leq c_1leq c_2leq L) )的子矩形满足,其中恰好包含了 (k) 种不同颜色的点至少一个

    求答案(mod 10^9+7) ,保证不存在两个点的坐标相同

    • (kleq nleq2 imes10^3)
    • (Lleq10^9)

    对于一维的情况,枚举右端点 (r) ,双指针找出最大的 (l) ,使得区间 ([l, r]) 满足条件,即可统计答案

    先离散化,枚举矩形的 (r_2) ,考虑升序枚举 (r_1)

    对于 (r_1=1) 时,套用一维的做法,对每个 (c_2) 求得最大的 (P_{c_2}) ,使得子矩形 ((r_1, P_{c_2}), (r_2, c_2)) 合法

    (r_1) 转移时,考虑删掉 (X_i=r_1) 的点 (i) 会对 (P) 造成什么影响

    找到 (C_i)(Y_i) 的上一次出现位置 (pre) 和下一次出现位置 (nxt) ,对于所有 (jin[Y_i, nxt)) ,若 (P_jleq Y_i) ,则 (P_j) 需要对 (pre) 取 min,因为删掉了点 (i) 后区间 ([P_j, j]) 将不再有颜色 (C_i)

    由于 (P_j) 是递增的,使用支持区间覆盖的线段树即可

    时间复杂度 (O(n^2log n))


    一道憨憨

    给定一张 (n) 个点 (m) 条边的有向图,找到一种给每个点一种染色的方案,使得对于每个点 (u) ,其所有出边 (v) 的颜色都相等,并且使用不同颜色数量尽量多

    对于每个点 (u) 把它的出边用并查集缩到一起即可


    瞎写一下

    (V+F-E=2)

    给定若干条线段,求平面被分割成了多少份,可用该式

  • 相关阅读:
    关于StringBuilder拼成的json格式数据,在转化成string数据类型后,转义符失效
    jQuery 引用地址{包括jquery和google提供的地址}, 节省你不必要的流量
    jQuery的.bind()、.live()和.delegate()之间区别
    使用Jquery Easy UI要导入的js顺序
    babygin
    card
    DecimalFormat用法
    DATEDIFF 函数 [日期和时间]
    IsDirectory( )的用法
    Arrays.asList()函数
  • 原文地址:https://www.cnblogs.com/Juanzhang/p/13620422.html
Copyright © 2020-2023  润新知