![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT
文章平均质量分 50
饼饼夹豆腐
stay energetic
展开
-
最短路径总结
今天学习了《算法笔记》最短路径 最小生成树 拓扑排序部分 这里做简单总结最短路径使用较多的是dijstra算法 基于贪心的思想 在无负边权的情况下,可以有效地求出单源最短路径,它维护d[]表示结点i到起点的距离 每次选择距离起点最近地结点访问,也就是d[i]最小的结点i进行访问,之后,使用结点i对未访问过的结点进行松弛,可以使用优先队列进行优化。在许多题目中,不会只考最短距离,一般会有第二,第三标尺,比如边权之和,点权之和,最短路径的条数等,以上这三个标尺可以在松弛过程中一并更新优化,关键是建立num[]原创 2021-09-05 23:35:58 · 460 阅读 · 0 评论 -
1076 Forwards on Weibo
1076 Forwards on Weibo题意描述给出图结构 求某个节点发出信息在层数限制下能够转发的最多人数输入输出格式数据规模节点数 <= 1e3算法设计像这种模型最适合使用BFS来求解了。BFS搜索的过程更像是水面波纹扩散,一圈一圈的,而且第一次到达某个节点时,其扩散次数一定是最少的,由此便有BFS最短路模型,比如 一次跳两个或三格 问到达目的地要跳几次 跳的过程好比扩散搜索的过程,结构便是扩散的次数,也是就扩散的层数 还有 八数码问题 问移动几次能够到达目表状态 还有 迷宫搜索原创 2021-09-03 21:35:36 · 113 阅读 · 0 评论 -
1021 Deepest Root
1021 Deepest Root题意描述给出多个结点 求哪个结点做根结点时图的高度最高输入输出格式数据规模结点的个数小于等于 1e4算法设计一种解法是枚举每个结点 求每个结点做根节点时图的最大高度 即从根节点出发做DFS(gg u, gg depth) 求得参数depth最大另一种解法是使用图的直径。图的直径是指图中任意两点之间最短距离的最大值 直径有许多性质 直径能够有多条 直径的两端有多个点 从任意一点开始进行DFS 能够到达的最大深度节点一定是直径的一端,当然 相同深度的节点可能有多原创 2021-09-03 21:34:56 · 86 阅读 · 0 评论 -
1034 Head of a Gang(DFS)
1034 Head of a Gang(DFS)题意描述由通话信息来判断几人是否位于一个帮派输入输出格式输入通话记录 输出 帮派的个数 以及每个帮派的头目和人数数据规模算法设计这里使用DFS求解,这个DFS模型是比较经典的。我们使用DFS搜索图结构时,一般函数的参数第一个是当前访问的结点编号,之后的参数便是问题的信息,注意,这些参数一般是引用型的,会随着搜索实时更新,引用主函数变量,而且一经绑定便不会变化。函数处理的逻辑是 先将flag[i] 置true 表示 这个结点已经访问 若不置true原创 2021-09-03 19:45:18 · 105 阅读 · 0 评论 -
1034 Head of a Gang(并查集)
1034 Head of a Gang题意描述由通话信息来判断几人是否位于一个帮派输入输出格式输入通话记录 输出 帮派的个数 以及每个帮派的头目和人数数据规模算法设计这里采用并查集的做法。首先建立并查集数组unordered_map<string,string>ufs 再维护每个人的权重 unordered_map<string,gg>weight 最后 由于题目要求按头目字典序升序输出 故用 map<string,array<gg,2>>res原创 2021-09-03 12:19:41 · 61 阅读 · 0 评论 -
A1103 Integer Factorization
A1103 Integer Factorization题意描述给定一个整数n 将其分解为 k个正整数的p次幂之和输入输出格式输入 n k p数据规模n <= 400 k <=n p >=2 and p <7算法设计这个题中没有给每个正整数的取值范围 但我们可以想到 如果单个数的p次已经大于了n 显然就没必要再增大了 而且 n 小于 400 p 大于2每个数的取值集合 不过包含16个数搜索的思路有两种 第一种是枚举k个数 每个数都有fac.size()种可能 显然原创 2021-08-23 16:18:36 · 108 阅读 · 0 评论 -
数值算法STL
在stl中提供了许多的泛型算法在stl中 函数接受的迭代器区间均是左闭右开的 这样 右区间端点 - 左区间端点 即为区间中元素个数 也为区间的实际长度 或者使用distance()函数 它会返回[ )区间中元素的个数 即区间长度在使用一些stl算法时,要注意其使用的条件 返回值 比如 区间合并函数 merge() 操作的两个容器要有序,第五个参数是写入位置的迭代器 必须保证容器有相应的长度 而且 它的返回值是指向有效数字的下一个 左闭右开 由此 便于我们确定结果区间的有效长度比如 一些集合操作 s.原创 2021-08-12 18:58:09 · 95 阅读 · 0 评论 -
1082 Read Number in Chinese
1082 Read Number in Chinese题意描述给一个不超过9位的数 要求输出 数在传统中文的读法输入输出格式输入即为一个不超过9位的十进制整数 可正可负 输出它的中文读法 两个单词之间用空格隔开数据规模数最多有9位算法设计首先 确定一个方向 我们要处理 ling的添加 数字和中文的对应 以及数字对应的权重的中文我们可以先将数字逆序 从个位开始枚举 ,若这位数字不为0,我们将其对应的中文添加至结果向量res中我们设立两个表 第一个表是数字中文进行转换 ,第二个表是数字的进原创 2021-08-05 12:19:04 · 91 阅读 · 0 评论 -
二分 模板
二分本质二分的本质是 一个序列 具有某种性质 能将序列划分为性质不同的两部分 而二分 则可以将这两部分区间的端点求出来举例现有一个非递减的序列 我们要求一个数在这个序列的下标那我们就可以将这个序列划分为两部分 一部分是 小于 这个数的 另一部分 是大于等于 这个数的 那区间端点可以理解为 大于等于这个数的第一个数的下标 那模板如下bool check(int mid){...}int bsearch1(vector<int>& nums,int l, int r){原创 2021-08-05 10:06:31 · 62 阅读 · 0 评论 -
PAT-B-1024 科学计数法
1024 科学计数法题意描述科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。输入输出格式每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。数据规模该数字的存储长度不超过 9999 字节,且其指数的绝对原创 2021-08-04 19:49:58 · 169 阅读 · 0 评论 -
B1008 数组元素循环右移问题
B1008 数组元素循环右移问题题目tag 模拟题意给定n个数 一个整数m 使得这n个数循环右移m个单位 且不开辟额外空间解法三次反转 先反转 [n-m,n-1] 后反转 [0,n-1] 最后 整体反转 即可代码#include <bits/stdc++.h>using namespace std;using gg = long long;int main(){ ios::sync_with_stdio(false); cin.tie(0); int n原创 2021-07-30 16:00:01 · 74 阅读 · 0 评论 -
PAT B1026 程序运行时间
PAT B1026 程序运行时间tag 简单模拟题意描述给出了起始时间和终止时间,单位为大小等于100 的一个数,求运行时间 。输出格式hh:mm:ss 对于不足一秒的时间,进行四舍五入算法思路思路很简单 关键是结果的四舍五入 可以使用 round() 函数,返回一个double型变量经四舍五入后的值。代码#include<bits/stdc++.h>using namespace std;using gg = long long ;int main(void){原创 2021-07-30 11:38:37 · 67 阅读 · 0 评论