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

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

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树即可。

NOI08冬令营 数据结构的提炼与压缩的更多相关文章

  1. Redis数据结构—整数集合与压缩列表

    目录 Redis数据结构-整数集合与压缩列表 整数集合的实现 整数集合的升级 整数集合不支持降级 压缩列表的构成 压缩列表节点的构成 小结 Redis数据结构-整数集合与压缩列表 大家好,我是白泽.今 ...

  2. bzoj千题计划252:bzoj1095: [ZJOI2007]Hide 捉迷藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1095 点分树+堆 请去看 http://www.cnblogs.com/TheRoadToTheGo ...

  3. [转] ACM中国国家集训队论文集目录(1999-2009)

    国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98试题PICTURE谈起>来煜坤:<把握本质,灵活运用——动态规划的深入探讨>齐鑫:<搜索方法中的 ...

  4. NOI 国家集训队论文集

    鉴于大家都在找这些神牛的论文.我就转载了这篇论文合集 国家集训队论文分类 组合数学 计数与统计 2001 - 符文杰:<Pólya原理及其应用> 2003 - 许智磊:<浅谈补集转化 ...

  5. ACM/IOI 历年国家集训队论文集和论文算法分类整理

    国家集训队1999论文集 陈宏:<数据结构的选择与算法效率--从IOI98试题PICTURE谈起> 来煜坤:<把握本质,灵活运用--动态规划的深入探讨> 齐鑫:<搜索方法 ...

  6. ACM/IOI 国家队集训队论文集锦

    转自:https://blog.csdn.net/txl199106/article/details/49227067 国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98 ...

  7. lucene底层数据结构——底层filter bitset原理,时间序列数据压缩将同一时间数据压缩为一行

    如何联合索引查询? 所以给定查询过滤条件 age=18 的过程就是先从term index找到18在term dictionary的大概位置,然后再从term dictionary里精确地找到18这个 ...

  8. 一文读懂Redis常见对象类型的底层数据结构

    Redis是一个基于内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件.Redis支持五种常见对象类型:字符串(String).哈希(Hash).列表(List).集合(Set)以及有序集合( ...

  9. Redis | 第一部分:数据结构与对象 中篇《Redis设计与实现》

    目录 前言 1. 跳跃表 1.1 跳跃表与其节点的定义 1.2 跳跃表的API 2. 整数集合 2.1 整数集合的实现 2.2 整数集合的类型升级 2.3 整数集合的API 3. 压缩列表 3.1 压 ...

随机推荐

  1. CAN总线与RS485的比较

    CAN总线与RS485的比较 http://blog.csdn.net/reille/article/details/6135546 can总线与485总线有什么区别?  http://blog.16 ...

  2. CSS3-旋转齿轮

    CSS3-旋转齿轮 查看DEMO 通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片.Flash 动画以及 JavaScript. 先来认识一下css3的animation animat ...

  3. 我的Python成长之路---第六天---Python基础(18)---2016年2月20日(晴)

    os模块 提供对操作系统进行调用的接口 >>> import os >>> os.getcwd() # 获取当前工作目录,类似linux的pwd命令 '/data/ ...

  4. CloudStack 物理网络架构

    原文地址:http://www.shapeblue.com/cloudstack/understanding-cloudstacks-physical-networking-architecture/ ...

  5. ios8 swift开发:显示变量的类名称

    var ivar = [:] ivar.className // __NSDictionaryI var i = 1 i.className // error: 'Int' does not have ...

  6. UVA 270 Lining Up 共线点 暴力

    题意:给出几个点的位置,问一条直线最多能连过几个点. 只要枚举每两个点组成的直线,然后找直线上的点数,更新最大值即可. 我这样做过于暴力,2.7s让人心惊肉跳...应该还能继续剪枝的,同一直线找过之后 ...

  7. 卸载了PL/SQL Developer,说一下与Toad for Oracle的对照

    曾经一直用PL/SQL Developer来管理Oracle.发现真的使用起来非常不方便.打开非常卡,并且界面左上角总是多出那个框,怎么都无法设置默认隐藏掉. 唯一让人认为非常值得的就是有一个美化工具 ...

  8. OpenStack里对VPN的支持

    今天翻自己的笔记找到了点去年研究Cloudpipe的东西: 对于用VLAN隔开的项目内主机的访问,可以使用CloudPipe来进行VPN访问 其实就是把OpenStack和OpenVPN集成了一下,给 ...

  9. 永久性for循环配合switch语句可以实现菜单功能

    永久性for循环配合switch语句可以实现菜单功能总结:加入想要无条件地跳转到某条语句执行,用goto语句: 加入想要对某种条件进行判断,为真或为假分别执行不同的语句,用if语句 加入想要检测的条件 ...

  10. DOM操作HTML文档

    概述 之前写过一些关于DOM方法的知识,理论方法的偏多,所以,这篇博客主要是实践方面的Demo,如果,大家觉得理论方面有所欠缺,大家可以看看这几篇博客:JavaScript总结(一.基本概念)和Jav ...