• NOI08冬令营 数据结构的提炼与压缩


    无聊随手翻,翻到了一个这样的好东西——据结构的提炼与压缩

    为了防止以后忘记,这里把论文里的题目都纪录一下吧。

    1.二维结构的化简

    问题一:ural 1568 Train car sorting

    定义一个对序列的操作:将这个序列分成两个,然后首尾连起来(我知道我描述得不清楚,自己想一下就好),例子:5 3 2 4 1分成3 4 15 2,然后变成3 4 1 5 2

    求将一个排列变成一个升序序列需要进行的操作次数。

    我觉得不需要像论文一样弄一个什么母矩阵。我觉得可以给一个序列中每个元素一个高度(其实本质还是一样的,囧),比如5 3 2 4 1就有

    5---
    -3-4
    --2-
    ---1
    

    我们要让最高的高度越小,并且每一行都是一个升序序列。

    然后论文就给出了一个算法,但没有说怎样思考得来的。这个算法确实很美妙。什么,你问我算法是什么?在论文里。时间复杂度:(O(n log n))

    问题二:CEOI 2007 Day 2 Necklaces

    我就觉得这题就是一个Trie的进化版。

    2.树形结构的化简

    问题三:浙江2007年省选 捉迷藏

    将树变成括号序列。

    比如这棵树:

    我们可以得到一个这样的序列:[A[B[E][F[H][I]]][C][D[G]]]

    考察两个结点,如E和G,取出介于它们之间的那段括号编码 :]{()()}]()[[
    把匹配的括号去掉,我们看到(2)](2)[,也就是说,在树中,从E向上爬(2)步,再向下走(2)步就到了G。

    对于介于两个节点间的一段括号编码S,可以用一个二元组((a,b))描述它,即这段编码去掉匹配括号后有(a)]和b个[

    这样,就得到了一个十分有用的结论:
    (a2<b1)((a,b)= (a1-b1+a2, b2)),当(a2 geq b1)((a,b)=(a1, b1-a2+b2))
    由此,又得到几个简单的推论:
    (a+b=a1+b2+|a2-b1|=max((a1-b1)+(a2+b2),(a1+b1)-(a2+b2)))
    (a-b=a1-b1+a2-b2)
    (b-a=b2-a2+b1-a1)

    然后就可以用线段树搞搞了。时间复杂度:(O(n log n))

    问题四:2005年国家集训队何林论文 树的统计

    问题描述:给定一棵含有(n)个节点的树,所有的节点分别编号为(1, 2, 3, …, n)。对于编号为(v)的节点,定义(t(v))(v)的后代中所有编号小于(v)的节点个数。求(t(1), t(2), t(3), …, t(n))

    这题的算法太美妙了!

    我们求这棵树的DFS序和逆DFS序。

    DFS序:7 10 14 2 13 1 9 11 6 5 8 3 15 12 4
    逆DSF序:7 4 3 12 15 9 6 8 5 11 1 10 14 13 2

    然后用神奇的加减法就可以得到(t(v))了:
    (t(v)=f(v,)DFS序列中(v)之后的部分()+f(v,)逆DFS序列中(v)之后的部分()+f(v,)(v)的所有祖先()-v+1)

    然后用个栈和树状数组搞搞就算出来了。时间复杂度:(O(n log n))

    其实我觉得可以用DFS序和Splay就可以搞出来了,囧。

    问题五:问题二的遗留问题

    说实话,我觉得论文里的”超级父亲“好像比较显然。

    3.图结构的化简

    问题六:ural 1557 Network Attack

    给定一个无向连通图,若从中删去两条边能使它不连通,求所有这样的方案的总数。图点数n边数m。

    先做一棵DFS树,满足条件的两条边有且只有以下两种情况:

    问题七:ural 1569 Networking the “Iset”

    问题描述:输入一个无向图(G=(V,E)),求这个图的直径最小生成树。

    首先有个很有价值的结论:当属的直径长为偶数,树的中心是唯一;当树的直径长为奇数,树的中心是唯二的。

    证明:定义:l(v)=max{d(u,.v)|u,v是一个图中的点}。当树的直径为2d。设有一条直径是AB,AB中点是P。一方面,对于任意一个点C,设AB上距离C最近的点位Q,不妨Q在AP上,则CP=BC-BP≤AB-BP=d ,同时AP=BP=d ,所以l(P)= d。另一方面,对于任意一个不是P的点C,设AB上距离C最近的点位Q,不妨Q在AP上,则BC=BP+PQ+QC>d ,所以l(C)>d 。所以,P就是这棵树的唯一的中心。

    奇数同理。

    然后我们可以枚举中心了,之后来一个BFS树即可。

  • 相关阅读:
    [转载]windows下mongodb安装与使用整理
    CentOS SVN 服务器搭建
    linux下expect使用教程
    PHP时间格式控制符对照表
    WebGoat学习——SQL注入(SQL Injection)
    跨站脚本攻击(Cross‐Site Scripting (XSS))实践
    WebGoat学习——跨站请求伪造(Cross Site Request Forgery (CSRF))
    WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))
    编程方式取得Spring上下文的Properties
    网站页面打开浏览器table中显示图片
  • 原文地址:https://www.cnblogs.com/wangck/p/4444601.html
Copyright © 2020-2023  润新知