![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 71
nianiajr
http://www.liangjiarui.com/
展开
-
uva 712-S-Trees
S-Trees A Strange Tree (S-tree) over the variable set is a binary tree representing a Boolean function . Each path of the S-tree begins at the root node and consists of n+1 nodes. Eac原创 2013-07-30 12:29:04 · 857 阅读 · 0 评论 -
uva 1160
此题意思大概就是使得给出化合物来装运,但得保证n个化合物中刚好有n种元素,那么我们以每个元素为一个结点,装上车化合物即会连边成图,这样以来就能想到为避免爆炸就不应该出现环的情况,因为在无环图中,n个点也就只有n-1条边,每条边代表一个化合物,那么有环的时候就刚好是n个点n个化合物了,这便是把实际问题抽象出图论模型,这样以来问题就变成检验是否有环和无环的问题了。对于检验是否存在环,笨一点的办法就原创 2013-08-22 15:54:34 · 652 阅读 · 0 评论 -
uva 1329
这个题大概意思就是描述子节点到根节点距离关系,但随着I的操作,每次根节点可能会改变,可以先把问题这么想,距离既然只是节点到根节点的关系,那么进行状态压缩是必要的,因为节点是如何到根节点的我们并不关心,但要是根节点也改变了,那么我们得在更新该节点到新根节点的距离前,把该节点的父亲节点到新根节点的距离给维护了,这就是为什么的先维护父亲节点,再来更新,否则会报错,一定要分清他们的先后顺序,否则会WA。原创 2013-08-22 18:33:38 · 734 阅读 · 0 评论 -
uva 1428
题意:给出n个乒乓球选手的能力值a[i],要求从其中选出三个人,一个为裁判,两个作为选手,且裁判的能力位于两者之间,位置也位于两者之间,问有多少种方法,类似这样的题,要抽象成数学模型那就应该确定其中一个的位置来找其他两个的数学关系,不妨我们先确定裁判的位置,假设裁判位置为i,那么就得从1~i-1和i+1~n中选两个能力值分别位于裁判两边的选手,那么在1~i-1中假设有c[i](i表示裁判位置)个选原创 2013-08-23 18:24:44 · 770 阅读 · 0 评论 -
uva 1428 ---RMQ应用
这是今天学会的内容,RMQ一般用来查询连续区间的信息的比如最大值最小值之类的,巧妙一点的就像本题经过一点转化将统计一个非降序序列的相同子串的最大长度,不过运用RMQ一定要熟练掌握它的预处理以及查询,记熟模版才是关键,看来是有必要每次做题就用个小本记录一下代码。#include#include#include#includeusing namespace std;const int原创 2013-08-26 23:40:39 · 576 阅读 · 0 评论 -
uva 1400 动态连续最大和
题目大意就是求给出n个数的排列,求其中连续的最大和,由于会有n多的查询,查询是任意的,那么就是动态的查询,RMQ解决不了这样的问题,用线段树可以实现动态查询,还好本题没要更新,不过光记录的信息就会有很多,思路是根据训练指南上面给的思路,构造一棵线段树,其中每个结点维护3个值:max_sub(a,b),max_prefix(a,b),max_suffix(a,b),然后通过区间合并维护建树,最后在已原创 2013-08-27 16:31:00 · 641 阅读 · 0 评论 -
uva 11988
这其实是一道很简单的模拟题,方法都相近,可能用数学的思维解比较巧妙,不过直白点就用链表模拟,可是由于最近没怎么做题了,一直WA,傻逼的没发现很白的错误,诶,看来做什么都是要持之以恒的,如果只是三天打鱼两天晒网,是根本不可能有什么太大收获,一定要好好做题了。#include#include#include using namespace std;struct list{ c原创 2013-09-06 22:25:40 · 792 阅读 · 0 评论 -
hdu 4288
这题按我的做法是超时的,虽然开始也知道这应该是个线段树,不过由于之前都是看还没独立写过,所以没去尝试,果然那后面自己的写法超时了,没办法还是得用线段树,可基本不太会怎么办····最后只好先看看别人的代码了,不过能看懂也说明之前线段树的学习是有成效的,好像这题不仅有线段树,还说有离散化什么的,我猜大概意思是把每个下标mod 5的和用线段树表示出来,由于他们是间隔散乱的,如何让他们整合用线段树来表达,原创 2013-09-09 15:32:56 · 840 阅读 · 0 评论 -
三元顺序表基本加法以及减法
哎,数据结构的作业题,看来还是好弱,写了两小时,在加法那里算迷糊了,三元顺序表神马的,还是不知道拿来干嘛的,操作好难过的啊,贴下挫代码纪念纪念。//三元组顺序表进行加法及乘法运算 #include#include#include#define max(a,b)(a>b?a:b)#define MAXSIZE 10005 typedef struct{//定义三元顺序表的元素内原创 2013-11-05 21:41:21 · 2503 阅读 · 0 评论 -
关于基本最短路求解总结
最近数据结构也要考试来着,所以把最短路的一些基础题给做了一下,大概就以下几种方法:1.floyd算法:嵌套三个循环,利用离散的求关系传递闭包的逻辑关系,可求两点直接的最短路径,不过复杂度在O(n^3),一般用在n比较小的时候,在判断流通货币等问题时,利用floyd也可以起到良好效果,因为利用bellman当然也可以判断是否有回路,但要判断这个回路是否可以产生流通差价还是需要一些特定处理的,原创 2013-12-21 11:35:35 · 875 阅读 · 0 评论 -
poj3259
依旧是判环,不过需要注意的是边的设定#include#include#include#includeusing namespace std;struct edge{ int from; int to; int v;}es[6000];int n,m,w,f,s,e,t,E,d[505];bool find_loop(){ memset(d,原创 2013-12-21 11:41:07 · 762 阅读 · 0 评论 -
poj1062
遍历+dijsktra,注意每次可以使用的更新点的筛选#include#include#include#include#include#includeusing namespace std;const int INF=0x3f3f3f3f;int m,n,t,v;int p[105],l[105],x[105],vis[105],ans,d[105];struct ed原创 2013-12-21 11:45:27 · 738 阅读 · 0 评论 -
uva 11997
这是从刘汝佳训练指南上找的例题,值得学习的地方就是要养成把问题拆分然后再多路归并的好习惯,题目是要求从k组数据中任意取一个数找出然后选出其中和最小的k组数据,选择最小可以用优先队列很快实现,那么如何选择就应该想想选择呢?按书上思路就是先把问题分成只有两组数据时的情况,那么列式就变成:A1+B1A2+B1.AN+B1那么这样以来我们每次选出最优的就可以了,然后把其去掉再比较再选择原创 2013-08-22 13:41:43 · 797 阅读 · 0 评论 -
uva 1203
这个题目大概意思是有一种触发器一样的东西,每次输入以后就算是激活了,每个响应周期就要返回这个数字,当有多个数字要在同一时间返回时,那就要输出最小的数字,那么其实每次都是取最优的问题,由于这些数据成一种线性排布,那么最优的话就应该想到可以用优先队列来维护这些数据,这也是题目的考查意向,那就是熟悉优先队列,具体的就看代码了,一定要学会优先队列的优先重载运算定义:#include#include原创 2013-08-21 21:47:23 · 725 阅读 · 0 评论 -
uva 11991
这个题是学会使用stl中的map映像来进行匹配,相比单用纯数组要方便多了,熟练运用将会方便很多。此题只需要用map >创建一个动态匹配,每一个key就是一个动态数组,以此来储存各个相同key的下标。#include#include#include#includeusing namespace std;map > m;int main(){ int n,q,a,k,v原创 2013-08-21 12:24:58 · 749 阅读 · 0 评论 -
uva-The falling leaves
The Falling Leaves Each year, fall in the North Central region is accompanied by the brilliant colors of the leaves on the trees, followed quickly by the falling leaves accumulating under原创 2013-07-30 15:01:45 · 909 阅读 · 0 评论 -
uva 839 - Not so Mobile
Before being an ubiquous communications gadget, a mobile was just a structure made of strings and wires suspending colourfull things. This kind of mobile is usually found hanging over cradles of small原创 2013-07-30 23:21:27 · 701 阅读 · 0 评论 -
uva572 - Oil Deposits
The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and creates a grid that divides th原创 2013-07-31 13:48:35 · 598 阅读 · 0 评论 -
uva 10562 - Undraw the Trees
Professor Homer has been reported missing. We suspect that his recent research works might have had something to with this. But we really don't know much about what he was working on! The detectives t原创 2013-07-31 13:27:14 · 562 阅读 · 0 评论 -
uva11234-
Problem E: ExpressionsArithmetic expressions are usually written with the operators in between the two operands (which is called infix notation). For example, (x+y)*(z-w) is an arithmetic expressi原创 2013-07-25 13:44:46 · 974 阅读 · 0 评论 -
uva11111--栈的应用
Problem B - Generalized Matrioshkas Vladimir worked for years making matrioshkas, those nesting dolls that certainly represent truly Russian craft. A matrioshka is a doll that may be opene原创 2013-07-26 16:07:52 · 969 阅读 · 0 评论 -
uva112
BackgroundLISP was one of the earliest high-level programming languages and, with FORTRAN, is one of the oldest languages currently being used. Lists, which are the fundamental data structures in LI原创 2013-07-27 17:13:01 · 815 阅读 · 0 评论 -
uva297-四叉树
Quadtrees A quadtree is a representation format used to encode images. The fundamental idea behind the quadtree is that any image can be split into four quadrants. Each quadrant may again原创 2013-07-29 00:56:22 · 951 阅读 · 0 评论 -
线段树-动态查询区间最大和
// LA3938 Ray, Pass me the dishes!// Rujia Liu#include#include#includeusing namespace std;const int maxn = 500000 + 10;const int maxnode = 1000000 + 10;typedef long long LL;typed翻译 2013-08-19 21:47:18 · 784 阅读 · 0 评论 -
uva 11992 快速矩阵操作
// UVa11992 Fast Matrix Operations(更易读、更具一般性的版本)// Rujia Liu// 注意:所有叶子上总是保留set标记而不会被清除(pushdown只能针对非叶结点),因此maintain函数对于叶子来说并不会重复累加addv[o]// 本程序在query的时候进行了标记传递(即pushdown),更具一般性,代码可读性也更强,但执行效率较低转载 2013-08-21 11:49:11 · 959 阅读 · 0 评论 -
uva 11995
这个题其实就是掌握基础栈,队列,与优先队列基础操作的,将他们模仿一遍判断下就好,注意的是有个小坑,如果入的次数小于出的操作那明显是不可能的,要输出Impossible// UVa11992 Fast Matrix Operations(更易读、更具一般性的版本)// Rujia Liu// 注意:所有叶子上总是保留set标记而不会被清除(pushdown只能针对非叶结点),因此mainta原创 2013-08-21 11:53:01 · 746 阅读 · 0 评论 -
poj2253
floyd变形,求最短路径最大值#include#include#include#includeusing namespace std;struct point{ double x,y;}p[205];double g[250][250];const double INF=100000000.0;int n;double dis(point p1,point原创 2013-12-21 11:47:28 · 648 阅读 · 0 评论