zoukankan      html  css  js  c++  java
  • 题解-CF375

    CF375


    CF375A Divisible by Seven

    luogu

    注意到 (1,9,8,6) 全排列可以得到所有 (mod 7) 的余数。

    然后别的数随便排,这四个数选个排法就好了。

    aclink


    CF375B Maximum Submatrix 2

    luogu

    方法 (1)

    我场上怼的做法,时间复杂度 (Theta(nmlog )),加个快读就过了。

    分治,每次处理 ([l,r]) 的列,找到中线,设 (f(l,r)) 表示中线左边有连续超过 (l)(1),中线右边有超过 (r)(1) 的行数,答案与每个 ((l+r)f(l,r)) 取最大值即可。

    方法 (2)

    时间复杂度 (Theta(nm)),先预处理 (f(i,j)) 表示 ((i,j)) 这个格子左边的连续的 (1) 个数。然后对每个 (j),把 (i) 这维排序然后计算贡献即可。这个排序可以用个桶。

    aclink-方法 (1)


    CF375C Circling Round Treasures

    luogu

    看清题意:炸弹和宝藏合起来不超过 (8) 个。

    题目中说了如何判断回路包含物品,但讲得不清楚。

    大概就是每个物品向右有一条射线,如果穿过回路奇数次就被包括。

    注意:把路径想象成一条曲线,然后这条射线可以与这个物品格子的上边线重合,这样可以防止把回路的一部分顺着这条射线走当成被包含。

    然后把一个炸弹当作价值 (-infty) 的宝藏,就可以分层图最短路,节点 ((x,y,s)) 表示在 (x,y) 这个位置,对于 (s) 这个集合的宝藏射线穿过次数为奇数。

    然后得出最短路以后答案与每个 (s) 的价值 (-) 起点与这个集合节点的最短路取 (min) 即可。

    aclink


    CF375D Tree and Queries

    luogu

    方法 (1)

    dfn 求了,然后转为区间查询。莫队,维护每个颜色出现次数和大于某个次数的颜色数,时间复杂度 (Theta(nsqrt n))

    aclink

    方法 (2)

    野蛮 dsu on tree,询问挂到树上节点上。

    然后对于每个非重儿子,先解决子树,然后再同莫队维护两个东西把贡献加上。

    对于重儿子,解决完子树后不删贡献。

    由于走轻儿子深度不会超过 (Theta(log n)),重儿子的复杂度不重复发生,所以时间复杂度 (Theta(nlog n))

    aclink


    CF375E Red and Black Tree

    luogu

    多好的问题啊,感觉最近还是要多自己思考,别打完比赛就盲目贺题。

    听说有个什么单纯形的线性规划,我永远不会学它的!

    (f(u,i,t)) 表示在节点 (u) 的子树中有 (i) 个点必须是黑点(其他点也可以是黑点的),然后用 (t) 这个节点解决 (u) 需要满足的条件的最小代价(相当于转化问题:从交换颜色,变成固定每个颜色数量,然后求出最少交换代价)。

    然后考虑怎么转移,如果子树状态是 (f(v,j,a)) 要合并上来:

    1. 如果 (a=t),那么 (f(u,i+j,t)leftarrowmin f(u,i,t)+f(v,j,t))(为什么不是 (i+j-1) 啊?可能是您没理解这个 dp):

      1. 如果 (t)(v)(u) 的子树外,那么它们都不需要统计这个黑点。
      2. 如果 (t) 在之前 (u) 的子树内,那么这个黑点算在 (i) 中不算在 (j) 中。
      3. 如果 (t)(v) 的子树内,这个黑点算在 (j) 中不算在 (i) 中。
    2. 如果 (a eq t),易证:只有 (a)(v) 子树中且 (t)(v) 子树外是优化的:

      1. 如果 (a)(v) 子树外,那么 (u)(v)(a) 更近,所以应该 (t=a)
      2. 如果 (t)(v) 子树内,那么 (v)(u)(t) 更近,所以应该 (a=t)
    • 然后合并完后是 (f(u,i+j,t))(要求 (t)(v) 子树外),直接找到对于每个 (v) 子树内的 (a) 最小的 (f(v,j,a)) 即可转移。

    然后再想想该怎么初始化:

    1. 首先先把所有 dp 值赋为 (+infty)

    2. 对于节点 (u),初始化 (f(u,1,u)=1-col_u)

    3. 对于节点 (u) 和满足 (dis(u,v)le x)(v(v eq u)),初始化 (f(u,0,v)=0)

    然后答案就是所有 $ile $ 原来黑点数量的 (f({ m root},i,t)) 最小值。

    aclink,要用 short 卡空间。


    [Huge m ycx/qq/qq ]

  • 相关阅读:
    C#(99):Queue<T>队列与Stack<T>堆栈
    C#(99):字典Dictionary<Tkey.TValue>与SortedList
    C#(99):列表:List<T>与HashSet和只读集合
    C#(99):C#数组Array
    C#(99):枚举类型与位域枚举Enum
    C#(99):结构类型:Struct
    C#(99):定义类成员(属性、方法、索引、运算符、事件)、接口实现
    C#(99):定义类、System.Object对象、构造函数与析构函数、抽象类与静态类
    SuperSocket.ClientEngine介绍
    C#(99):五、并行编程
  • 原文地址:https://www.cnblogs.com/George1123/p/14242261.html
Copyright © 2011-2022 走看看