随笔分类 -  C++数据结构

摘要:本题做法 队列(queue)和结构体。 思路 我们一开始最容易想到的方法就是使用一个动态数组 vector 来存储数据,但是这样操作光是一次操作 1 的 \(c\) 达到极限数据 \(10^9\) 就会直接超时,时间复杂度为 \(O(c)\)。我们需要想一些优化思路。 定义结构体类型 node 代表 阅读全文
posted @ 2025-07-07 11:25 2789617221guo 阅读(26) 评论(0) 推荐(0)
摘要:本题做法 拓扑排序。 思路 本题可以利用拓扑排序,每次找到入度为 0 的生物,然后将吃它的生物的路径计数加上它本身的计数,直到所有生物都被遍历到为止。最后输出答案即可。 代码 #include<bits/stdc++.h> typedef long long ll; typedef unsigned 阅读全文
posted @ 2025-07-06 18:48 2789617221guo 阅读(47) 评论(0) 推荐(1)
摘要:本题做法 Dijkstra最短路+离散化思想。 思路 这其实是一道 Dijkstra 最短路的裸题,只需要对于每一次询问做一次 Dijkstra 然后判断输出即可。 这题有意思的点在于它的编号不是数字而是字符串,我们在这种情况下可以使用离散化思想,将每一个字符串通过 map 映射到一个唯一的数字上, 阅读全文
posted @ 2025-05-14 22:47 2789617221guo 阅读(6) 评论(0) 推荐(0)
摘要:本题做法 二分+优先队列。 思路 这题有几个坑点: 二分的 \(l,r\) 最好使用 unsigned long long 类型,以及需要特判答案可能是 0 的情况。 二分开始时 \(r\) 设置成 \(1\text e18\) 会被卡常,最好的方法是设置成 \(\max(s,len)\)。 二分答 阅读全文
posted @ 2025-04-08 22:21 2789617221guo 阅读(35) 评论(0) 推荐(0)
摘要:本题做法 BFS。 思路 简单的 BFS 打卡题。从 m 的位置开始 BFS,直到找到 d 的位置,此时由于是按照层序搜索的,所以步数一定是最少的,故直接输出步数,程序退出。最后如果 BFS 结束后依然没有输出,则直接输出 No Way!。 代码 #include <bits/stdc++.h> # 阅读全文
posted @ 2025-03-24 19:47 2789617221guo 阅读(17) 评论(1) 推荐(0)
摘要:本题做法 BFS。 思路 本题其实难就难在传送门如何存储。我的做法是使用 3 个 map 存储传送门,一个 map 叫做 \(exist\)(map<char,bool>),代表传送门 \(c\) 是否存在(就是有没有输入过了),是为了后面的存储判断做准备;第二个 map 叫做 \(lastdoor 阅读全文
posted @ 2025-03-13 20:14 2789617221guo 阅读(47) 评论(0) 推荐(0)
摘要:本题做法 二分答案+并查集。 思路 二分答案\(x\),使用并查集判断在\(x\)时刻内是否能够形成连通块。 若任意2点的曼哈顿距离(即\(x\)坐标和\(y\)坐标的差值之和)小于等于\(2x\)(因为2个点是同时在扩散的),则这2点在\(x\)时刻内是可以形成连通块的。将2点在并查集内连边在一起 阅读全文
posted @ 2025-03-02 13:15 2789617221guo 阅读(29) 评论(0) 推荐(0)
摘要:【个人笔记】BST(Binary Search Tree)二叉搜索树代码模板 #include <bits/stdc++.h> #define endl '\n' using namespace std; const int INF = 0x7fffffff; const double EPS = 阅读全文
posted @ 2025-02-24 20:41 2789617221guo 阅读(5) 评论(0) 推荐(0)