- 博客(62)
- 收藏
- 关注
原创 1240. 完全二叉树的权值
现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。注:根的深度是 1。第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,⋅⋅⋅AN。输出一个整数代表答案。
2024-03-23 14:25:23 190
原创 1498. 最深的根
输出最深的根的节点编号。如果最深的根不唯一,则按照从小到大的顺序,将它们依次输出,每个占一行。如果给定的图不是树,输出 Error: K components,其中 K 是图中连通分量的数量。一个无环连通图可以被视作一个树。树的高度取决于所选取的根节点。现在,你要找到可以使得树的高度最大的根节点。第一行包含整数 N,表示节点数量。节点编号为 1∼N。接下来 N−1 行,每行包含两个整数,表示两个节点之间存在一条边。
2024-03-14 11:28:14 458
原创 1507. 旅行计划(迪杰斯特拉)
第一行包含四个整数 N,M,S,D,分别表示城市数量,公路数量,起点城市编号,终点城市编号。接下来 M 行,每行包含四个整数 a,b,c,d,表示城市 a 和城市 b之间存在一条公路,长度为 c,花费为 d。每条高速公路的长度和走该条公路的花费都是已知的,高速公路都是双向的。现在要从地图中的某个城市前往另一个城市。请你确定最短路径,当最短路径不唯一时,请你选取花费最小的路径(保证唯一)。共一行,首先输出从起点城市到终点城市的最短路径(花费最少的)经过的所有城市,然后输出最短路径的距离以及最小的花费。
2024-03-13 15:04:40 410
原创 4196.最短路径
给定一个 n 个点 m 条边的的无向图。点的编号从 1 到 n。图中可能包含重边和自环。请你找到并输出一条从点 1 到点 n 的最短路径。第一行包含两个整数 n,m。接下来 m 行,每行包含三个整数 a,b,w,表示点 a 和点 b 之间存在一条无向边,边长为 w.的最短路径中依次包含的点的编号,各点编号之间用空格隔开。如果答案不唯一,输出任意合理方案均可。如果最短路径不存在,则输出 −1。否则,在一行内输出从点 1 到点 n。前六个测试点满足 2≤n≤10,1≤m≤10。本题不卡spfa算法。
2024-03-11 16:13:00 414
原创 3488.最短路径floyd、并查集
N个城市,标号从 0 到 N−1,M 条道路,第 K 条道路(K 从 0开始)的长度为 2K,求编号为 0的城市到其他城市的最短距离。N−1 行,表示 0 号城市到其他城市的最短路,如果无法到达,输出 −1,数值太大的以 mod100000 的结果输出。第一行两个正整数 N,M,表示有 N 个城市,M 条道路。接下来 M 行两个整数,表示相连的两个城市的编号。
2024-03-10 17:42:14 379
原创 3647. 惠民工程,并查集
市政府“惠民工程”的目标是在全市 n 个居民点间之架设煤气管道(但不一定有直接的管道相连,只要能间接通过管道可达即可)。很显然最多可架设 n(n−1)/2 条管道,然而实际上要连通 n 个居民点只需架设 n−1 条管道就可以了。现请你编写程序,计算出该惠民工程需要的最低成本。每组数据第一行包含两个整数 n 和 m,表示居民点数量和评估管道数量。接下来 m 行,每行包含三个整数 a,b,c,表示居民点 a 和 b 之间架设管道需要 c的成本。每组数据输出一行一个结果,表示全市管道畅通所需要的最低成本。
2024-03-09 17:26:52 371
原创 1616.判断完全平衡二叉树
第一行输出得到的AVL树的层序遍历序列。第二行,如果该AVL树是完全二叉树,则输出 YES,否则输出 NO。第一行包含整数 N,表示插入序列中元素个数。第二行包含 N个不同的整数表示插入序列。
2024-03-02 10:51:42 370
原创 4706. 最短路径dfs,数组模拟邻接表
给定一个 n个节点的树。树中所有边均为双向边,且长度均已知。你需要从 1 号点出发,沿着一条路径遍历树中所有点,路径中可以包含重复的点和边。要求,你的行程总长度应尽可能短。请你计算,你所需的行程总长度的最小可能值。注意,你可以在任意点结束你的行程。接下来 n−1 行,每行包含三个整数 x,y,w,表示点 x 和点 y 之间存在一条双向边,长度为 w。前 4 个测试点满足 1≤n≤5。所有测试点满足 1≤n≤105,1≤x,y≤n,0≤w≤2×104。一个整数,表示行程总长度的最小可能值。
2024-02-08 12:08:52 372
原创 1072.树最长路径,dfs,数组模拟邻接表
给定一棵树,树中包含 n个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。现在请你找到树中的一条最长路径。换句话说,要找到一条路径,使得使得路径两端的点的距离最远。注意:路径中可以只包含一个点。第一行包含整数 n。接下来 n−1 行,每行包含三个整数 ai,bi,ci,表示点 ai 和 bi 之间存在一条权值为 ci 的边。输出一个整数,表示树的最长路径的长度。
2024-02-07 11:58:27 349
原创 根据中后序求层序,unordered_map
一个二叉树,树中每个节点的权值互不相同。现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。1≤N≤30,官方并未给出各节点权值的取值范围,为方便起见,在本网站范围取为 1∼N。第二行包含 N 个整数,表示二叉树的后序遍历。第三行包含 N 个整数,表示二叉树的中序遍历。输出一行 N 个整数,表示二叉树的层序遍历。第一行包含整数 N,表示二叉树的节点数。
2024-02-05 16:45:43 384
原创 1592.层序遍历,中序遍历,数组模拟二叉树
以下是来自 Max Howell @twitter 的内容:谷歌:我们的百分之九十的工程师都使用你编写的软件,但是你连在白板上反转二叉树都做不到,还是滚吧。现在,请你证明你会反转二叉树。接下来 N 行,每行对应一个 0∼N−1 的结点,给出该结点的左右子结点的编号,如果该结点的某个子结点不存在,则用 − 表示。输出反转后二叉树的层序遍历序列和中序遍历序列,每个序列占一行。相邻数字之间用空格隔开,末尾不得有多余空格。第一行包含一个整数 N,表示树的结点数量。所有结点编号从 0 到 N−1。
2024-02-03 13:28:04 428
原创 判断完全二叉树,数组模拟c++
第一行包含整数 N,表示树的结点个数。树的结点编号为 0∼N−1。接下来 N 行,每行对应一个结点,并给出该结点的左右子结点的编号,如果某个子结点不存在,则用 - 代替。如果是完全二叉树,则输出 YES 以及最后一个结点的编号。如果不是,则输出 NO 以及根结点的编号。给定一个树,请你判断它是否是完全二叉树。
2024-02-03 12:43:19 388
原创 查找二叉树结点C++,数组模拟二叉树
第一行包含整数 n,表示二叉树的结点数,结点编号从 1 到 n。第二行包含整数 x,表示要查找的结点的权值。其中的第 i行的第一个整数,表示结点 i 的权值,第二个整数表示结点 i 的左儿子结点编号(为 0 表示它没有左儿子),第三个整数表示结点 i 的右儿子结点编号(为 0表示它没有右儿子)。已知一棵二叉树用邻接表结构存储,中序查找二叉树中权值为 x 的结点,并指出该结点在中序遍历中的排列位置。1≤n≤100点的权值不超过 100,结点 1 为树的根结点,数据保证答案唯一。
2024-02-02 17:31:41 451
原创 3384.二叉树遍历C++
例如如下的先序遍历字符串: abc##de#g##f### 其中 # 表示的是空格,空格字符代表空树。共一行,输出将输入字符串建立二叉树后中序遍历的序列,字符之间用空格隔开。注意,输出中不用包含 #。编写一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。输入字符串长度不超过 100,且只包含小写字母和 #。共一行,包含一个字符串,表示先序遍历字符串。
2024-01-30 16:39:32 375
原创 字符串二叉树遍历
输入包含多组测试数据。每组数据占两行,每行包含一个大写字母构成的字符串,第一行表示二叉树的前序遍历,第二行表示二叉树的中序遍历。假定一棵二叉树的每个结点都用一个大写字母描述。给定这棵二叉树的前序遍历和中序遍历,求其后序遍历。每组数据输出一行,一个字符串,表示二叉树的后序遍历。输入字符串的长度均不超过 26。
2024-01-29 17:29:08 405
原创 3595.二叉排序树C++
现在给你 N 个关键字值各不相同的节点。每次成功插入一个节点后,求其相应的父亲节点的关键字值,如果没有父亲节点,则输出 −1。第二行包含 N 个互不相同的正整数,表示要顺序插入节点的关键字值。若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键值;若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键值;l[i]存储的为左孩子的下标,r[i]存储的为右孩子的下标。fa[i]存储的为第i个节点的父节点的下标。第一行包含整数 N,表示待插入的节点数。w[i]存储的为第i个节点的值。
2024-01-29 16:12:47 398
原创 3556.floyd算法求最短路径
每组数据第一行包含三个整数 n,m,k。接下来 m行,每行包含三个整数 x,y,z,表示点 x 和点 y 之间存在一条长度为 z 的边。最后一行包含 k 个空格隔开的整数,表示去掉的边的编号。所有边按输入顺序从 1 到 m 编号。第二行输出去掉 k条边后,从 1 到 n 的最短距离。无法到达,则输出 −1。请问:从 1到 n 的最短距离。去掉 k 条边后,从 1 到 n的最短距离。给定一个 n个点 m 条边构成的无重边和自环的无向连通图。第一行输出从 1到 n 的最短距离。点的编号为 1∼n。
2024-01-29 14:43:42 373
原创 3555.数组模拟二叉树C++两结点路径
接下来 n 行,每行包含两个整数,其中第 i 行的整数表示结点 i 的子结点编号。如果没有子结点则输出 −1。进行 m 次询问,每次询问两个结点之间的最短路径长度。树中所有边长均为 1。给定一个 n 个结点(编号 1∼n)构成的二叉树,其根结点为 1 号点。每组测试数据输出 m 行,代表查询的两个结点之间的最短路径长度。接下来 m 行,每行包含两个整数,表示要询问的两个结点的编号。第一行包含一个整数 T,表示共有 T 组测试数据。每组数据第一行包含两个整数 n,m。
2024-01-27 17:44:12 412
原创 3540.数组模拟数,二叉排序树插入
输入一系列整数,利用所给数据建立一个二叉搜索树,并输出其前序、中序和后序遍历序列。共三行,第一行输出前序遍历序列,第二行输出中序遍历序列,第三行输出后序遍历序列。输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。第一行一个整数 n,表示输入整数数量。输入元素取值范围 [1,1000]。第二行包含 n 个整数。
2024-01-26 17:04:33 329
原创 3647. 并查集、图最短路径C++、自定义排序
市政府“惠民工程”的目标是在全市 n个居民点间之架设煤气管道(但不一定有直接的管道相连,只要能间接通过管道可达即可)。很显然最多可架设 n(n−1)/2 条管道,然而实际上要连通 n 个居民点只需架设 n−1 条管道就可以了。现请你编写程序,计算出该惠民工程需要的最低成本。每组数据第一行包含两个整数 n和 m,表示居民点数量和评估管道数量。接下来 m 行,每行包含三个整数 a,b,c,表示居民点 a 和 b 之间架设管道需要 c 的成本。每组数据输出一行一个结果,表示全市管道畅通所需要的最低成本。
2024-01-25 14:24:10 416
原创 单词识别C++(getline()、for(auto [k,v]:hash)
输入一行英文句子,统计句子中出现的各个单词(不区分大小写)及其出现次数。要求能识别英文句号和逗号,即是说单词由空格、句号和逗号隔开。按字典顺序,输出每个单词及其出现次数。单词在输出时,应将字母全部转化为小写。每个单词的输出占一行。共一行,包含一个长度不超过 1000 的字符串。字符串中只包含大小写字母,空格,英文句号和逗号。至少存在一个有效单词,单词一定完全由字母构成。具体格式为:word:times。输入字符串长度不超过 1000。
2024-01-24 16:37:13 425
原创 约瑟夫环(报数游戏)C++
有 N 个小朋友围成一圈玩报数游戏,将小朋友编号为 1∼N,从 1 号开始进行 1,2,3 报数。每当一个小朋友报到 3 时,该小朋友出局,下一个小朋友继续从 1 开始报数,直到所有小朋友出局为止。例如,当 N=5 时,所有小朋友的出局顺序依次为 3,1,5,2,4。一行,一个整数,表示最后一个出局的小朋友的编号。请问,最后一个出局的小朋友的编号是多少?一行,一个整数 N。
2024-01-21 11:38:36 731
原创 双指针比大小C++
Tomislav 最感兴趣的是最长的高度一直上升的子序列,她称这一段路为爬坡,Tomislav 只想考虑这段爬坡的高度差(即开始和最后的数字的差距),而不是什么路程长度。例如,我们考虑如下路线数列 12 3 5 7 10 6 1 11,这里有两个爬坡,第一个爬坡(3 5 7 10)的高度差是 7,第二个爬坡的高度差是 10(1 11)。她最喜欢的运动是骑自行车,因此她决定在本地的小山上做一次旅行。她骑自行车的路线可以描述为 n 个数字的数列,每个数字表示每一段路地海拔高度。,pn,表示路线数列。
2024-01-18 17:00:47 363
原创 字符串排序 sort(str.begin(),str.end(),greater<>())
例如,对于 210,你可以通过重排得到 201,210,012,021,102,120,其中 120,210 都是 30的倍数,由于要找最大的,所以答案是 210。给定一个整数 n,你可以将其中的数字以任意顺序重新排列,组成新的数字(也可以不重排,保留原数字)。请问能否组合出 30 的倍数,如果可以,则输出满足条件的最大值,否则输出 −1。输出能够通过重排得到的最大符合条件的数。如果不存在,则输出 −1。
2024-01-18 15:23:04 431
原创 3587. 连通图(并查集)C++
每组数据第一行包含两个整数 n 和 m,表示无向图的点和边数。接下来 m 行,每行包含两个整数 x,y,表示点 x 和点 y相连。每组数据输出一行,一个结果,如果所有顶点都是连通的,输出 YES,否则输出 NO。给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。点的编号从 1 到 n。图中可能存在重边和自环。输入最多包含 10 组数据。输入包含若干组数据。
2024-01-18 12:59:00 382
原创 数组翻转(C++)
在本题目中,还引入另外一种洗牌方式,就是把前一半(如果总数是奇数,就是(n−1)/2)牌翻转过来,这种操作称之为翻转(flip)。给定 n 张牌,初始次序为从 1 到 n,经过若干次的 shift 和 flip 操作后,结果会是什么样?这个方式其实就是数组的循环移位,为了多次进行这个操作,必须使用一种尽可能快的方法来编程实现。比如原来的次序是 123456,从第 4 个位置交换,结果就是 561234。当然,如果是实际的扑克牌,直接翻转会造成正反面混在一起的,我们就不管那么多了。
2024-01-17 17:35:22 463
原创 不连续1的子串C++
例如,当 N=3 时,答案为 5,因为长度为 3且不含连续 1 的 01串一共 5。请计算长度为 N且不含连续 1的 01串的个数。个:000,001,010,100,101。2的二进制为10,第0位为0,第1位为1。3的二进制为11,第0位为1,第一位为1。1的二进制为1,第0位为1。一个整数,表示结果。
2024-01-16 16:55:37 467
原创 括号匹配(带优先级)栈C++
对于每一对括号,必须先左边括号,然后右边括号;如果有多个括号,则每种类型的左括号和右括号的个数必须相等;对于多重括号的情形,按运算规则,从外到内的括号嵌套顺序为:大括号->中括号->小括号->尖括号,另外相同的括号可以嵌套。在算术表达式中,除了加、减、乘、除等运算外,往往还有括号。包括有大括号 {},中括号 [],小括号 (),尖括号 <> 等。例如,{[()]},{(())},{{}} 为一个合法的表达式,而 ([{}]),{([])},[{<>}] 都是非法的。接下来 n行,每行包含一个括号表达式。
2024-01-16 14:08:32 695 1
原创 3704.拓扑排序(优先队列)queue、C++
N个小朋友,编号 1∼N,要排成一队。在安排每个人的顺序时,有 M 个要求,每个要求包含两个整数 a,b,表示小朋友 a 要排在小朋友 b 的前面。按排好队列从前到后的顺序在一行内输出每个小朋友的编号。保证至少存在一个符合条件的顺序。当符合条件的排队顺序不唯一时,编号更小的小朋友尽量更靠前。第一行包含整数 N,M。接下来 M 行,每行包含两个整数 a,b。请你找出符合所有要求的排队顺序。保证数对 (a,b) 各不相同。
2024-01-15 16:00:05 441
原创 逆序对数C++
在此排列中的逆序数,换句话说,bi 等于该排列中先于 i 又大于 i的那些数的个数。bn称为排列 a1a2…an 的逆序数列(inversion sequence)。给定一个 1∼N 的随机排列,要求一次只能交换相邻两个数,那么最少需要交换多少次才可以使数列按照从小到大排列呢?逆序数列:给定 n个数 1,2,…,n 的一个排列 a1a2…第一行输出逆序数列,数之间用空格隔开。第二行输出最少交换次数。请你求出一个待排序序列的最少交换次数和对应的逆序数列。第一行一个整数 N。第二行一个 1∼N的排列。
2024-01-15 13:47:26 399
原创 括号匹配C++
苗苗今天刚刚学会使用括号,不过他分不清小括号,中括号,大括号和尖括号,不知道怎么使用这些括号,请帮助他判断括号使用是否正确。共一行,包含一个由 <,(,{,[,>,),},] 构成的字符串。如果输入的字符串中的括号正确匹配则输出 yes,否则输出 no。输入字符串长度不超过 10000。注意:不需要区分括号的优先级。
2024-01-15 12:59:51 387
原创 3699.树的高度C++(dfs)
第一行是两个整数 N,M,表示数的顶点数和根节点的编号。接下来 N−1 行,每行两个整数 u,v,表示编号为 u 的节点和编号为 v的节点间有一无向条边。现在给定一棵有根树,编程求出树中所有节点到指定的根节点最远距离。树是一种特殊的图结构,有根树是一个有固定根的树。输出距离根节点最远的点到根的距离。
2024-01-14 13:04:12 529
原创 5070.二叉树遍历C++
给定二叉树的后序遍历和中序遍历,请你输出二叉树的前序遍历的最后一个数字。假设二叉树上各结点的权值互不相同且都为正整数。第一行包含整数 N,表示二叉树结点总数。输出二叉树的前序遍历的最后一个数字。二叉树结点权值范围 [1,109]。第二行给出二叉树的后序遍历序列。第三行给出二叉树的中序遍历序列。
2024-01-13 15:03:13 469
原创 一端进,两端出(队列)C++
在插入过程中和插入完成后的任意时刻,你可以随时删除队列中的现有元素(如果有的话)。*给定一个输入受限的双端队列(即一个端点允许插入和删除,另一个端点只允许删除的双端队列)和一个长度为 N。每个删除序列,输出一行答案,如果该删除序列可以通过给定插入序列得到,则输出 yes,否则输出 no。你需要将插入序列中的元素按顺序依次插入到给定队列中。现在,给定 K 个删除序列,对于每个删除序列,请你判断其能否通过给定插入序列得到。接下来 K 行,每行包含一个删除序列,保证每个删除序列都是给定插入序列的一个排列。
2024-01-12 17:12:19 513 1
原创 平方朋友对C++
给定一个正整数 n,我们规定如果两个正整数 A和 B 满足,对于任意 0≤i<n,都可以通过在 A+i后面添加 3 位数字(具体添加什么可以自由选择)的方式得到 (B+i)2,则称 (A,B) 是平方朋友对。如果不存在满足条件的 A,B,则输出 No Solution.否则,每行输出一对满足条件的 A,B,输出时优先输出 A 更小的数对,A相同时,优先输出 B更小的数对。例如,当 n=3 时,如果 A=73,B=272,则 (A,B) 平方朋友对,因73984=272^2 ,
2024-01-12 16:38:49 413
原创 3712.根能抵达的节点(二分法、DFS)C++
节点编号从 0到 N−1,其中 0 号点为根节点。最初,从根节点可以抵达所有节点(包括自己)。如果我们将所有边权小于 X 的边全部删掉,那么从根节点可以抵达的节点数目就可能发生改变。接下来 N−1行,每行包含三个整数 U,V,W,表示点 U 和点 V 之间存在一条权值为 W 的边。现在,给定一个整数 Y,请你找到最小的非负整数 X,使得所有边权小于 X。的边都被删掉以后,根节点能够抵达的节点数目(包括自己)不超过 Y。保证在一个测试点中,所有 N 的和不超过 105。注意,X 应不小于 0。
2024-01-12 12:08:55 416
原创 递进数字C++
给定两个整数 l,r(l≤r),请问 [l,r] 范围内,满足数字的任意相邻两位差值都恰好为 1,且数字至少有两位的数有多少个。第一行包含整数 T,表示共有 T 组测试数据。每组数据占一行,包含两个整数 l 和 r。每组数据输出一行,一个结果。
2024-01-11 16:19:51 365
原创 16进制不进位的加法C++
16进制不进位的加法,即和正常加法类似,只是不用去计算进位的数,比正常的加法更简单。如 A+6=0(正常加法是 10,但是由于不进位所以只有 0)。每组数据占一行,包含两个十六进制数,字母统一大写。每组数据输出一行不进位加法的结果。输入数字长度不超过 100。结果中可能包含前导 0。输入包含多组测试数据。
2024-01-11 14:50:20 476
原创 插入乘号C++
给定一个长度为 n的数字串,向里面插入 k 个乘号,输出可以得到的最大结果。注意:插入乘号之后的每个数可以有前导0。第一行输入两个整数 n,k。第二行输入长度为 n 的一个数字序列。输出可以得到的最大结果。
2024-01-10 18:48:19 473
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人