zoukankan      html  css  js  c++  java
  • 练手题1

    练习随笔#

    洛谷P1120##

    AC记录:https://www.luogu.com.cn/record/31540878

    注意点:对于数组范围需求较大并且真正存值的元素相对来说较少,那么我们可以使用map<存储类型,存储类型>,他的使用和常规数组一样,并且是访问它的时候才分配内存,既可以防止访问过界,又可以防止内存浪费

    洛谷P5836##

    AC记录:https://www.luogu.com.cn/record/31552012

    它的题意是求路径u-v上是否有颜色H或者G

    1)LCA:我们记录从根节点到每个节点的路径上颜色为H/G的个数(树上前缀和即可)(这题有点毛病的就是他默认建树是从1开始)

    查询时直接树上差分即可

    2)并查集:如果说我们把相邻且颜色一致的归入一个并查集,那么我们在查询路径上u-v时,如果他们不属于一个并查集,那么他们之间一定有阻断,那么两种颜色都有;如果属于一个并查集,那么他们之间的路径颜色唯一且就是u,v点的颜色

    洛谷P2671##

    AC记录:https://www.luogu.com.cn/record/31652244

    他的题意是:给定一个序列,每个序列元素i含有一个值Ai和一个颜色值Bi,序号下标从1开始

    符合条件的数对:

    1)序号奇偶相同

    2)颜色相同

    记他们的贡献为(i+j)(Ai+Aj),求满足条件的所有数对的贡献和取模10007

    启发:对于一些集合而言,如果每对元素都存在特定关系,且通过某种处理可以使得他们的先后不产生影响,那么我们可以通过研究单一元素,以此普及到集合中所以元素来研究全集合的一些性质。

    比如这道题目,要满足颜色是相同的,那么我们要做的就是把所有颜色相同的归入一个集合,那么这个集合中所以元素两两配对,我们现在要求他们的贡献值,一共有n*(n-1)/2组,数据太庞大了。

    我们怎么把这个转化为线性的东西嘞?

    那么现在对于集合的元素两两都存在一定关系,并且先后的次序并不会影响,所有我们固定研究一个对象i,把(i+j)(Ai+Aj)拆开,发现每个i都要乘上Aj,i还要单独乘上Ai,很显然后者总数量与i配对数量有关,而配对数量是一个定值,而前者补上Ai就成了集合的数值和,所以这样计算每个对象的时候,抓住了一些集合共性,这样就方便很多了。

  • 相关阅读:
    poj 2485 Highways 最小生成树
    hdu 3415 Max Sum of MaxKsubsequence
    poj 3026 Borg Maze
    poj 2823 Sliding Window 单调队列
    poj 1258 AgriNet
    hdu 1045 Fire Net (二分图匹配)
    poj 1789 Truck History MST(最小生成树)
    fafu 1181 割点
    减肥瘦身健康秘方
    人生的问题
  • 原文地址:https://www.cnblogs.com/et3-tsy/p/12486674.html
Copyright © 2011-2022 走看看