zoukankan      html  css  js  c++  java
  • GDKOI2015 Day1

    P1

    题目描述:

      判断一个环形字符串(或者减去一个字符之后)是否是回文串

    solution:

    1.hash      

      将字符串的前缀进行hash,然后将字符串翻转,再做一次hash,然后枚举对称轴,判断两边的hash值是否相等就可以了。

      时间复杂度:( O(n) )

     

    2.manacher

      将字符串倍增,然后直接求最长回文串,判断是否大于等于原串长。

      时间复杂度:( O(n) )

     

    P2

    题目描述:

      经典网络流

    solution:

      经典路径网络流,将每个点拆成入点与出点,dicnic。

       时间复杂度:( O(52^2m) )

     

     

    P3

    题目描述:

      哈密顿回路最优方案

    solution:

      看题目的时候发现是哈密顿回路,但哈密顿回路是NP完全问题,数据太大了。然后发现题目有特殊性,i号点连向( (2i)\%N )与( (2i+1)\%N ),N为奇数是无解的,当N为偶数时,i与( i+frac{N}{2} )的入点与出点是相同的,就可以把原图缩成原来的( frac{1}{2} ),每条边必须走一次。这样就把哈密顿回路转化成欧拉回路(环套环搜索),题目要求最优方案就贪心一下好了。

      时间复杂度:( O(n) )

     

    P4

    题目描述:

      给出一棵树,每个结点有颜色和点权,支持三种操作:

      1、将子树的某两种颜色交换

      2、路径某颜色权值和

      3、改变某结点的颜色与点值。

    solution:

    1.树链剖分+DFS序

      这题就难在子树修改,大多数的数据结构只能修改链。同一棵子树的点在DFS序中是连续的,所以只要将树链剖分的线段树的点的顺序变成DFS序,将可以实现子树修改。每个结点记住一个对应关系,表示新的颜色对应哪种旧颜色,稍微处理一下就可以了。

      时间复杂度:( O(nlogn) )

     

    2.10棵LCT

      每一种颜色开一棵LCT,维护该种颜色的结点(不是这种颜色的也要记,不过权值为0罢了),子树修改的时候直接把子树的根的父亲进行修改,而第三种操作有点麻烦,要记住树节点的地址,否则搞不清这个点究竟在那棵LCT里。

      时间复杂度:( O(nlogn) )  常数较大

     

    3.ETR(Euler Tour Representation)的序列

      这是DFS序的拓展,按照时间戳来建结点,用DFS遍历这棵树,刚开始搜到这个点时在线段树建一个点(正),搜索完后再建一个点(负),这就将到根路径变成了前缀和,颜色交换是区间操作,用线段树可以完美解决。

      时间复杂度:( O(nlogn) )

  • 相关阅读:
    iOS 之 内存管理
    php的异步并行扩展swoole
    如何用php实现qq登陆网站
    php分页类
    php的分页代码
    一个小的投票系统
    php如何判断两个时间戳是一天
    PHP中出现Notice: Undefined index的三种解决办法
    vmvare如何安装xp虚拟机
    windows2003安装
  • 原文地址:https://www.cnblogs.com/GerynOhenz/p/4355762.html
Copyright © 2011-2022 走看看