
数据结构
文章平均质量分 58
SuperRandi
听取wa声一片
展开
-
CF862B Mahmoud and Ehab and the bipartiteness(二分图的性质)
添加的边数就是cnt[1]*cnt[2]-n+1条。一个二分图最多有cnt[1]*cnt[2]条边。原创 2024-11-18 21:31:32 · 214 阅读 · 0 评论 -
BFS与Dijkstra的区别
(2)Dijkstra算法时间复杂度:朴素版的时间复杂度为O(n*n),堆优化版的时间复杂度为O(mlogn)所以根据以上对比,我们会发现在某些情况下bfs算法的时间复杂度会比Dijkstra算法小很多。,其中V为顶点数,E为边数。这是因为在最坏情况下,需要访问所有的顶点和边才能完成遍历。这两种算法都是常见的最短路算法,但在做题中使用哪种算法往往与其时间复杂度有关。原创 2024-10-24 23:36:17 · 315 阅读 · 0 评论 -
线段树例题
思路: 用线段树进行op=1的单点修改,用二分+区间查询进行op=2的查找Ax左边最后一个小于Ax的位置ans1,然后查找Ax右边第一个小于Ax的位置ans2,答案就是(x-ans1+1)*(ans2-x+1),这里的二分还是有许多细节需要注意,这里就不多说了,大家看代码理解吧。原创 2024-05-28 11:46:45 · 1145 阅读 · 0 评论 -
排序+观光之旅(Floyd算法)
题目描述给定 n 个变量和 m 个不等式。其中 n 小于等于 26,变量分别用前 n 的大写英文字母表示。不等式之间具有传递性,即若 A>B 且 B>C,则 A>C。原创 2024-03-24 16:08:45 · 826 阅读 · 0 评论 -
最优乘车+最小花费(Dijkstra写法)
H 城是一个旅游胜地,每年都有成千上万的人前来观光。为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴士线路。每条单程巴士线路从某个巴士站出发,依次途经若干个巴士站,最终到达终点巴士站。一名旅客最近到 H 城旅游,他很想去 S公园游玩,但如果从他所在的饭店没有一路巴士可以直接到达 S 公园,则他可能要先乘某一路巴士坐几站,再下来换乘同一站台的另一路巴士,这样换乘几次后到达 S 公园。原创 2024-03-19 15:43:00 · 890 阅读 · 0 评论 -
字符串变换(双向广搜)
已知有两个字串 A, B 及一组字串变换的规则(至多 66 个规则):A1→B1A2→B2规则的含义为:在 A 中的子串 A1 可以变换为 B1、A2 可以变换为 B2…。例如:A=abcdB=xyzabc→xuud→yy→yzabcd→xud→xy→xyz共进行了三次变换,使得 A 变换为 B。注意,一次变换只能变换一个子串,例如 A=aaB=bba→b此时,不能将两个a在一步中全部转换为b,而应当分两步完成。原创 2024-03-18 19:13:32 · 553 阅读 · 0 评论 -
迷宫问题三种种解法(A*算法+BFS+双向广搜)
对于每组输入,输出从起点到终点的最短路程,如果不存在从起点到终点的路,则输出-1。输入包含多组测试数据。输入的第一行是一个整数T,表示有T组测试数据。接下来N行,每行输入M个字符,每个字符表示迷宫中的一个小方格。每组输入的第一行是两个整数N和M(1原创 2024-03-15 22:46:49 · 1819 阅读 · 0 评论 -
八数码(A*算法)+单词接龙(DFS)
在一个 3×3 的网格中,1∼8 这 8 个数字和一个x恰好不重不漏地分布在这 3×3 的网格中。在游戏过程中,可以把x与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):把x与上下左右方向数字交换的行动记录为udlr。现在,给你一个初始网格,请你通过最少的移动次数,得到正确排列。原创 2024-03-14 18:48:49 · 751 阅读 · 0 评论 -
第K短路(A*算法)
接着就是从起点开始计算到终点的距离,我们需要将起点到终点距离小的优先出队,同一个点第几次出队就是第几短的路,那么就需要用到小顶堆了。N),M条边的有向图,求从起点 S到终点 T 的第 K 短路的长度,路径允许重复经过点或边。接下来 M 行,每行包含三个整数 A,B, 和 L,表示点 A 与点 B 之间存在有向边,且边长为 L。输出占一行,包含一个整数,表示第 K 短路的长度,如果第 K 短路不存在,则输出 −1−1。最后一行包含三个整数 S,T 和 K,分别表示起点 S,终点 T 和第 K 短路。原创 2024-03-13 13:43:19 · 868 阅读 · 0 评论 -
电路维修(双端队列广搜)
例如从坐标点(1,1)可以到到(0,2),(0,0),(2,0),(2,2),那么便可以很容易地写出坐标点的方向数组了,同时我们需要考虑坐标点在偏移的时候其跨越的格子中的斜线是否能连通,所以我们需要数组string cs来存储坐标点四个方向的路线形状,例如int dian_ne[4][2]={{-1,-1},{-1,1},{1,-1},{1,1}};根据Dijkstra算法的思想求最短步数,应将每次步数少的优先出队,本题也借用此思想来做,若边权为1,则放入双端队列的队尾,否则放入队头。原创 2024-03-12 15:46:49 · 991 阅读 · 0 评论 -
求区间的最大值(RMQ、线段树)
有n个数,给你m个询问,每次询问给你A,B个数,要求你编写程序求出[A,B]这个区间中的最大值。第三行读入一个 M,表示你看完那串数后需要被提问的次数。输出共 M行,每行输出一个数,表示对一个问题的回答。接下来 M行,每行都有两个整数 A,B。接下来一行为 N个数,表示数字序列。第一行一个整数 N表示数字的个数。原创 2024-03-11 17:58:35 · 651 阅读 · 0 评论 -
最少交换次数(求逆序对、树状数组、离散化)
解法一:树状数组+离散化。原创 2024-03-09 13:25:29 · 457 阅读 · 0 评论 -
拯救行动(BFS)
牢房用 N \times M (N, M \le 200)N×M(N,M≤200) 的矩阵来表示。现假设骑士可以向上、下、左、右四个方向移动,每移动一个位置需要 11 个单位时间,杀死一个守卫需要花费额外的 11 个单位时间。"@" 代表道路,"a" 代表公主,"r" 代表骑士,"x" 代表守卫, "#" 代表墙壁。解题思路:因为要求到达‘a'的最小值,所以求每一步时都用前一步的最小值来求,那么就需要使用优先队列来做了。给定牢房矩阵,公主、骑士和守卫在矩阵中的位置,请你计算拯救行动成功需要花费最短时间。原创 2024-03-08 22:39:01 · 596 阅读 · 0 评论 -
树状数组经典例题:楼兰图腾+一个简单的整数问题+一个简单的证书问题2+谜一样的牛
相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(V),一个部落崇拜铁锹(∧),他们分别用 V 和 ∧ 的形状来代表各自部落的图腾。如果三个点 (i,yi),(j,yj),(k,yk) 满足 1≤i原创 2024-03-05 21:44:46 · 727 阅读 · 0 评论 -
p节点(BFS)
给出一颗有根树,总共 n 个节点,如果一个节点的度不小于它所有的儿子以及他的父亲的度(如果存在父亲或者儿子),那么我们称这个点为 p 节点,现在给你一棵树你需要统计出 p 节点的个数。然后 n−1 行,每行两个数 x,y(0原创 2024-03-04 18:56:29 · 423 阅读 · 0 评论 -
数据结构测试题
例如,若t=0,则应输出是“0:0:0”;第1行,两个整数n,m(5≤n≤5000,3≤m≤n),中间用一个空格隔开,其中n表示报名参加笔试的选手总数,m表示计划录取的志愿者人数。从第2行开始,每行包括两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。1. 找到{5, 3, 8, 2, 9}中最小的两个数,分别是2和3,从{pi}中删除它们并将和5加入,得到{5, 8, 9, 5},费用为5。请在这里写输入格式。原创 2024-03-02 14:01:58 · 1283 阅读 · 0 评论 -
单链表分段逆转(画图分析)
其中List/* 存储结点数据 *//* 指向下一个结点的指针 *//* 定义单链表类型 */L是给定的带头结点的单链表,K是每段的长度。函数K_Reverse应将L中的结点按要求分段逆转。原创 2024-02-29 13:27:26 · 953 阅读 · 1 评论