自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 资源 (1)
  • 收藏
  • 关注

原创 二叉树创建、遍历、插入

【代码】二叉树创建、遍历、插入。

2023-05-07 20:24:10 159 1

原创 敌兵布阵(HDU1166)线段树单点更新、区间查询

每组数据的第一行都包含一个整数N(N≤50000),表示有N个兵营。接下来有N个正整数,第i个整数ai表示第i个兵营的人数(1≤ai≤50)。A国在边境线设置N个兵营。对第i组数据,首先单行输出“Case i:”,然后对每个Query都单行输出查询区间的总人数。(3)Query i j,i ≤ j,表示查询第i~j个营地的总人数;(1)Add i j,表示在第i个兵营增加j个人(j ≤30)。(2)Sub i j,表示在第i个兵营减少j个人(j ≤30)。(4)End,表示结束,在每组数据的最后出现。

2022-12-10 00:09:45 257

原创 dfs序(树形结构线性化)

通过观察可以发现,以x 为根的子树在一个连续的区间,即在x 入栈和出栈之间,因此,如果要对子树进行操作,可以看作对一个区间进行操作,且这个区间对应新的线性序列中的in[x] out[x]。如对结点B根的子树进行操作,则对应线性序列区间in[B] out[B],即区间[2,5]进行操作。id[x]:表示结点x在新的线性序列中的下标, id[x]=in[x]。对单个结点x进行修改,则对应新的线性序列对id[x]进行修改。out[x]:表示结点x出栈的时间戳,特殊的,出栈不算时间。

2022-12-09 16:53:14 1795

原创 子树查询(POJ3321)

题目大意:有一棵苹果树,树上有N个叉(编号为1~N,根的编号为1),它们通过分支连接。苹果在叉上生长,两个苹果不会在同一个叉上生长,一个新的苹果可以在空叉上长出来,对苹果有两种操作。输入:第1行一个整数N(N≤100,000),表示树中叉的数量。以下N-1行,每行都包含两个整数,表示叉u和叉v通过分支连接。下一行包含整数M(M≤100,000)表示有M个操作。每行一个操作:C x表示改变叉上苹果状态(摘下一个苹果,或让长出一个新苹果)。Q x表示查询x叉上方子树中的苹果数量,包括叉上的苹果。注意:

2022-12-07 15:50:32 261

原创 公路交叉数(POJ3067)-树状数组解决逆序对

题目大意:东海岸有N个城市,西海岸有M个城市(N≤1000,M≤1000),将建K条公路。每个海岸的城市从北到南编号为1,2,…每条高速公路都是直线,连接东海岸和西海岸的城市。建设资金由高速公路之间的交叉数决定。两个高速公路最多在一个地方交叉。请计算告诉公路之间的交叉数量。输入:输入以T开始,表示测试用例的数量。每个测试用例都是3个整数N、M、K。下面的K行每一行都包含两个数字,表示高速公路连接的城市号。第一个数是东海岸的城市号,第二个数字是西海岸的城市号。输出:对每个测试用例都输出“Test c

2022-12-07 11:35:26 528

原创 数星星-树状数组(POJ2352)

DescriptionAstronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that are not higher and not to the right of the given star. Astronome

2022-12-07 10:05:17 380

原创 距离查询-离线Tarjan算法(POJ1330)

原题目:Farmer John’s cows refused to run in his marathon since he chose a path much too long for their leisurely lifestyle. He therefore wants to find a path of a more reasonable length. The input to this problem consists of the same input as in “Navigation

2022-12-04 15:58:38 109

原创 树上距离HDU2586(利用并查集的Tarjan算法)

题干请参考[树上距离HDU2586(LCA)](https://blog.csdn.net/hwdn3000/article/details/127939235?spm=1001.2014.3001.5501)Tarjan算法是离线解决LCA问题的算法。在线算法指每读入一个查询(求一次LCA就叫作一次查询),都需要运行一次程序才能得到本次查询答案。若一次查询时间需要O(logn)时间,则m次查询需要O(mlogn)时间。离线算法是先读入所有查询,然后运行一次程序得到所有查询答案。可以在O(n+m)时

2022-12-04 12:21:01 180

原创 树上距离HDU2586(在线RMQ算法)

该树的欧拉序列为1 2 4 6 8 6 9 6 4 2 5 7 5 2 1 3 1,搜索时得到6和5首次出现的下标i、j,然后查询该区间深度最小的节点,为6和5号节点的最近公共祖先。欧拉序列就是指在深度遍历过程中依次经过的节点记录下来,把回溯时经过的节点也记录下来,一个节点可能被记录多次,相当于从树根开始,一笔画出一个经过所有节点的回路。1、深度遍历,得到三个数组,每个节点首次出现的下标pos[ ],深度遍历得到的欧拉序列seq[ ],每个节点的深度dep[ ]。2、根据欧拉序列的深度,创建ST。

2022-11-30 17:20:55 187

原创 树上距离HDU2586(LCA)

每一个测试用例的第1行都包含n(2≤n≤40000)和m(1≤m≤20),表示房屋数量和查询数量。下面的n-1行,每行都包含三个数字i、j、k,表示有一条道路连接房屋i和j,长度为k(0

2022-11-26 11:35:40 285

原创 POJ1330最近公共祖先LCA

输入:第1行包含一个整数T,表示测试用例的数量。每个测试用例的第1行都包含整数N(2≤N≤10,000),表示树中的节点数。接下来N-1行,每行都包含一对边的整数,第1个整数是第2个整数的父节点(有N个节点的树有N-1条边)。每个测试用例的最后一行都包含两个不同的整数,求其LCA。题解:由于本题数据量不大,所以可以暴力求解最近公共祖先LCA。给你一棵树,找出两点的最近公共祖先LCA。

2022-11-18 19:07:06 407

原创 二维区间最值差(POJ2019)

她花了很大的代价调查她的N×N公顷的方形农场(1≤N≤250)。有k(1≤K≤100000)组查询,整数B(1≤B≤N)是方形田地的一个边长,查询B×B子矩阵中最大高度和最小高度的差值。N+1行,每行都包含N个整数,代表N×N公顷每公顷的高度,每行的第1个整数表示第一列,第2个整数都表示第二列。从当前位置(x,y)开始,向右B列,向下B行,查询每一行的最大值和最小值,再求最大值好最小值。将每个元素a[ ][ ] 都存入F[k][i][0]中。Fmax[k][i][j]表示第k行[i,i+2。

2022-10-21 10:37:43 266

原创 最小分段数(HDU3486)RMQ+二分+枚举

*输入:**输入多个测试用例。每个测试用例的第一行包含两个数字n和k,表示人数和每个人的能力值和(n≤200000,k≤1000000000);第二行都包含n个数值,表示每个人的能力值。以两个-1结束,不处理。假设知道最小的分段数m,其m个分段的最大值之和必然大于k。问题是不知道最小分段数m,可以采用二分法搜索找到m。给你 n 个数,让你分成 m 组,每组长度 n / m,剩下的人不要。每组最大值之和要大于给出的 k,问最小的 m 是多少。对每个测试用例,都单行输出可以找到的最小m。

2022-10-21 09:21:59 149

原创 最频繁值(区间最值POJ3368)

i和j (1≤i≤j≤n)表示查询的边界索引。i和j (1≤i≤j≤n)。例如:8的二进制1000,7的二进制0111,两者与运算为0,log(8)比log(7)增加1。(1)为了提高效率求出数据范围内的log值,将其存储在数组lb[]中。对于每个查询,用一个整数打印一行:在给定范围内出现最频繁的值的次数。题解:本题给定区间查最值,将各个区间的元素的出现次数累计,累计区间。外,其他数和前一个数的与运算不为0,其log值和前一个数相等。(2)将输入样例中元素的出现次数累计并存入F[i][0]中。

2022-10-19 09:46:26 431

原创 ST(Spare Table稀疏表)

ST(Spare Table稀疏表)算法采用了倍增思想,在O(nlogn)时间构造一个二维表,可以在O(1)时间在线查询[l,r]区间的最值,有效解决在校RMQ(Range Minimum/Maximum Query,区间最值查询)问题。10]={5,3,7,2,12,1,6,4,8,15},其查询最值的ST如下图所示。若查询[l,r]区间的最值,则首先计算k的值,和前面的计算方法相同,区间长度为r-l+1,2。递推公式:F[i,j]=max(F[i,j-1],F[i+2。-1]区间的最值,区间长度为2。

2022-10-18 11:51:27 364

原创 二叉搜索树

和堆一样,实际上不需要我们自己实现二叉搜索树。许多编程语言都在标准库里实现了简单易用的二叉搜索树。set是像前面所说的一样使用二叉搜索树维护集合的容器,而map则是维护键和键对应的值的容器。所有节点都满足,左子树上的所有节点都比自己小,而右子树的节点都比自己大。以上两种情况都不满足的话,把左儿子的子孙中最大节点提到需要删除的节点上。需要删除节点的左儿子没有右儿子,那么就把左儿子提上去。需要删除节点没有左儿子,那么就把右儿子提上去。3、二叉搜索树的复杂度都为O(log n)

2022-09-18 09:11:55 237

原创 归并排序(递归机制的学习)

【代码】归并排序(递归机制的学习)

2022-09-17 19:03:18 99

原创 优先队列 Fence Repair (PKU 3253)

准备切成的木板的长度为L1、L2、……、Ln. 未切割木板的长度恰好为切割木板的长度和。每次切断木板时,需要的开销为这块木板的长度。例如,长度为21的木板切割成5、8、8的三块木板。长为21的木板切割成13、8时,开销为21.再将长度为13的木板切割成长度5、8时,开销为13.于是合计开销为34。因为只需要从板的集合中取出最短的两块,并且把长度为两块长度之和的板加入集合中即可,所有使用优先队列就可以高效的实现。一共需要进行O(n)次O(log N)的操作,因此总的时间复杂度为O(Nlogn)。

2022-09-17 13:03:42 91

原创 优先队列 大根堆 Expedition (POJ 2431)

如果汽车在途中车上的汽油耗尽,卡车就无法继续前行,因而无法到达终点。第i个加油站在距离起点Ai单位距离的地方,最多可以给卡车加Bi单位的油。如果可以到达终点,输出最少加油次数,否则输出-1。分析:因为希望加油次数尽可能少,所以当燃料为0了之后再加油是最好的选择。基于贪心的思想,当燃料为0时,选择能加油量最大的加油站。所以可以用一个优先队列来保存经过的加油站的油量,当需要加油时,取出队列中的最大元素即可。输入格式:输入 N ,L, P的值,再输入N个加油站距离,再输入N个加油站的油量。

2022-09-15 18:44:31 120

原创 树的邻接表存储法

树可以使用链式存储结构,也可以使用邻接矩阵和邻接表一、邻接矩阵:我们可以使用一个n×n的bool数组mp,mp[x][y]为true,则表示从x到y存在有向边,为false则表示x到y不存在有向边。邻接矩阵存储代码如下:bool mp[MAXN][MAXN];void link(int x,int y){mp[x][y]=true;}二、邻接表同样,我们可以采用邻接表来存储一个点连出的多条树边,如下图:邻接表的代码如下:int m;int fi[MAXN];//存储结点儿子个数

2022-09-09 19:07:36 2760

原创 动态规划城市最短路径问题

最短路径问题(Shortestpathproblem)再不回退的前提下,找到A到F的最短路径。

2022-07-24 09:53:35 1193

原创 区间选点问题(贪心算法)

区间选点问题“多么希望有一天突然惊醒,发现自己是在小学的一节课上睡着了,现在经历的一切都是一场梦,我告诉同桌,说做了一个好长好长的梦,同桌骂我白痴,叫我好好听课。你看着窗外的球场,一切是那么熟悉,一切还充满希望……”张琦曼通过时空监测点听到40年前小墨老师对李旭林这样说。话说张琦曼等人将历史时间线划分了n个区域,我们可以将之看成是数轴上的n个闭区间[ai,bi]。现在设尽量少的监测点,使得每个区间都至少有一个点(不同区间内的点可以是同一个),问需要多少个监测点?输入一个帧数n,表示有n个闭区间,随后n

2022-04-26 21:31:35 493 1

原创 不相交区间问题(贪心算法)

不相交区间问题Problem Description“今年暑假不AC?”“是的。”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%…”确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标

2022-04-26 21:26:34 169

原创 金银岛(贪心算法)

金银岛总时间限制: 3000ms 内存限制: 65536kB描述某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种类, 每种金属重量不同,分别为n1, n2, … , ns,同时每个种类的金属总的价值也不同,分别为v1,v2, …, vs。KID想一次带走价值尽可能多的金属,问他最多能带走价值多少的金属。注意到金属是可以被任意分割的,并且金属的价值和其重量成正比

2022-04-26 21:21:57 409

原创 最大子矩阵

最大子矩阵总时间限制: 1000ms 内存限制: 65536kB描述已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。比如,如下4 * 4的矩阵0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2的最大子矩阵是9 2-4 1-1 8这个子矩阵的大小是15。输入输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。再后面的若干行中,依次(

2022-04-17 19:25:20 107

原创 Linux环境下 c++ 调试

1、首先,先去创建一个简单的C++代码。实现的功能很简单。就是初始化一个变量num=1,然后在做一个num+=2的操作。2、编写好代码后,我们需要生成一个可执行文件去运行程序。g++ -g test.cpp -o main如上指令,我们通过g++去编译test.cpp,并生成可执行文件main3、然后我可以运行一下代码看下结果:4、接着进行代码的调试,在命令行输入gdb,然后进入了gdb的环境下。5、然后输入file main这样我们就告诉gdb我们要调试main工程6、然后我们

2021-08-20 10:36:06 2304

原创 抓住那头牛(POJ3278广搜)

题目:农夫知道一头牛的位置,想要抓住它。农夫和牛都于数轴上 ,农夫起始位于点 N(0<=N<=100000) ,牛位于点 K(0<=K<=100000) 。农夫有两种移动方式步行或乘车:1、步行从 X移动到 X-1或X+1 ,每次移动花费一分钟2、乘车从 X移动到 2*X ,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。最少要花多少时间才能抓住牛?输入:两个整数N和K输出:单行输出农夫抓住牛所需的最短时间(以分钟为单位)。输入样例:5 17输出样例:

2021-08-19 16:07:02 301

原创 抓住那头牛(POJ3278深搜)

题目:农夫知道一头牛的位置,想要抓住它。农夫和牛都于数轴上 ,农夫起始位于点 N(0<=N<=100000) ,牛位于点 K(0<=K<=100000) 。农夫有两种移动方式:1、从 X移动到 X-1或X+1 ,每次移动花费一分钟2、从 X移动到 2*X ,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。最少要花多少时间才能抓住牛?输入:两个整数N和K输出:单行输出农夫抓住牛所需的最短时间(以分钟为单位)。输入样例:5 17输出样例:4算法设计:

2021-08-19 15:50:44 1270 1

原创 骑士的旅程(POJ2488 深度优先搜索)

题目:骑士按照下图所示的走法对棋盘进行巡逻,每个格子只允许巡逻一次,且必须巡逻所有格子。给定棋盘的行数m和列数n,输出一条骑士巡逻路径,若不存在这样一条路径,则输出impossible。输入:输入的第一行包含一个正整数T,表示测试用例的数量。每个测试用例的第一行都包含两个整数m和(1<=m×n<=26),表示m×n的棋盘,对行用数字(1 ~ m),对列用大写字母标识(A ~ Z)。输出:每个测试用例的输出都以一个包含 “Scenario #i”的行开i头,其中i是从1开始的测试用例编号。

2021-08-18 16:55:41 154

原创 理想路径(UVA1599 图的双向广度优先搜索)

题目:给一个n个点m条边(2≤m≤100000, 1≤m≤200000)的无向图,每条边上都涂有一种颜色(用1到1000000000表示)。求从结点1到结点n的一条路径,使得经过的边数尽量少,在此前提下,经过边的颜色序列的字典序最小。一对结点间可能有多条边,一条边可能连接两个相同结点。输入保证至少存在一条节点1到n的路径。输入:输入共m+1行。第一行包含两个整数n和m。之后的m行,每行都含三个整数ai、bi、ci,表示ai、bi之间有一条颜色为ci的路径。输出:输出共两行,第一行包含正整数k,表示节点

2021-08-18 13:48:29 415

原创 油田(UVA572图的搜索)

题目:某石油公司勘探地下油田资源,在一长方形区域中工作。他们的勘探方案是,首先将油田划分成许多小正方形区域,然后分别探测每一块小正方形区域是否有油。含有油就为油田。如果相邻两个(水平、垂直或对角线相邻)油田,就位相同油藏的一部分。油藏尽可能多的包含油田(油田的个数不超过100)。你的工作是确定这个长方形地域中包含多少个不同的油藏。输入:输入文件中包含一个或多个长方形地域。每个地域的第一行都有两个正整数m和n(1<=m,n<=100),表示地域的行数和列数。如果m=0,则表示输入结束;否则此

2021-08-15 10:47:01 187

原创 图的深度优先遍历

深度优先搜素(Depth First Search ,DFS)是最常见的图的搜索之一,深度优先搜索沿着一条路径一直搜索下去,在无法搜索时,返回到刚刚访问的节点。深度优先的特征是:后被访问的节点,其领接点先被访问。根据深度优先遍历的特征:后来者先服务,和数据结构栈的特征一样。所以可以借助栈来实现。使用递归也可以实现深度优先搜素,但递归本身也是使用栈实现的。1、算法步骤(1)初始化图中所有节点均未访问。(2)从图中某个节点v出发,访问v并标记为已访问。(3)依次检查v的所有邻接点w,如果w未被访问,

2021-08-15 09:42:55 5446

原创 图的广度优先遍历

广度优先遍历(Breadth First Search BFS)又被称为宽度优先搜素。如下图假设源点为1,从1出发访问1的邻接点2、3,从2出发访问4,从3出发访问5,从4出发访问6,访问完毕。基于邻接矩阵的广度优先代码:#include<iostream>#include<queue>//引入队列头文件using namespace std;const int MaxVnum=100;//顶点数最大值bool visited[MaxVnum]; //访问标志数组

2021-08-13 13:30:01 176

原创 奶牛排序(POJ3275)

题目描述:小D想按照奶牛产奶的能力给她们排序。现在已知有N头奶牛(1 ≤ N ≤ 1,000)。小D通过比较,已经知道了M(1 ≤ M ≤ 10,000)对相对关系。每一对关系表示为“X Y”,意指X的产奶能力强于Y。现在小D想要知道,他至少还要调查多少对关系才能完成整个排序。输入:第1行包含两个整数N和M。第2 … M+1行,每行都包含两个整数X和Y。X和Y都在1~N范围内,表示奶牛X的排名高于奶牛Y。输出:单行输出至少还要调查多少种关系才能完成整个排序。输入样例:5 52 11 52 3

2021-08-11 20:22:48 503

原创 有向图D和E

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-08-10 13:55:24 428

原创 最大的节点(p3916 图的遍历)

算法思路:存储图的反向图,在反向图上进行倒序深度遍历#include<bits/stdc++.h>using namespace std;const int maxn=100000+5;int maxx[maxn],head[maxn];int n,m,x,y,cnt;struct Edge{ int to,next;}e[maxn];void add(int u,int v){//添加一条边u--v e[cnt].to=v; e[cnt].next=head[.

2021-08-08 09:01:25 273

原创 图的存储详解

一、邻接矩阵#include<iostream>//创建无向图的邻接矩阵using namespace std;#define MaxVnum 100 //顶点数最大值typedef char VexType; //顶点的数据类型,根据需要定义typedef int EdgeType; //边上权值的数据类型,若不带权值的图,则为0或1typedef struct{ VexType Vex[MaxVnum]; EdgeType Edge[MaxVnum][MaxVnum

2021-08-06 19:53:53 160

原创 区间最值差模板代码(RMQ)

题目描述:在每天挤奶的时候,农民约翰的N头牛(1≤n≤50000)总是排成一列。有一天,约翰决定与他的牛们一起玩一个极限飞盘游戏。为了简单起见,他将从奶牛队列里面选一定范围内的奶牛来玩这个游戏。然而所有的牛对这个游戏都很感兴趣。农民约翰列出了Q份名单(1≤Q≤200000)和每个奶牛的高度(1≤高度≤1000000)。对于每一份名单,他想你帮助他确定在每份名单中高度最高的奶牛与高度最低的奶牛的高度差是多少。Input第一行为N(1≤N≤50000)和Q(1≤Q≤200000);从第2行到第N+1行,每

2021-07-25 12:09:13 147

原创 树的存储及遍历方法

一、有根树的父亲表示法除根节点外其他结点有且只有一个父节点,因此,我们可以把每一条边存储在其子结点上。记录形式为i结点的父亲是j结点如下图:father[a]=-1(表示不存在)father[b]=afather[c]=afather[d]=afather[e]=c…父亲表示法存储结构代码如下:int fa[MAXN]void link(int x,int y){fa[x]=y;}也可以用结构体来存储struct node{int data,parent}node

2021-05-27 11:24:40 871 1

转载 最小转弯问题带图详解

题解:定义一个结构体,记录坐标,记录到该点转弯次数,和改点的方向#include<bits/stdc++.h> using namespace std;int n,m,x1,y,x2,y2,h,t,a[120][120];int fx[5]={0,1,0,-1,0},fy[5]={0,0,1,0,-1};//转向数组 struct node{ int x,y,z,f; // x,y是坐标,z是转弯数,f是方向}b[100100];int main(){ scanf("%.

2021-05-20 15:19:59 612

Pixhawk4飞控驱动.zip

已安装成功

2021-12-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除