PAT甲级
陌陌623
BBZZUU
展开
-
旅游规划-堆优化版本-超精简
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中原创 2021-10-15 09:08:39 · 102 阅读 · 0 评论 -
1146 Topological Order (25 分)
This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topological order obtained from the given directed graph? Now you are supposed to write a program to test each of the options.Input Specification:Each input f原创 2021-04-23 14:50:30 · 167 阅读 · 0 评论 -
1021 Deepest Root (25 分)
随便用一个点x进行dfs,dfs中记录距离x最远的点集在集合中随便取出一个点,进行dfs,再次得到最远点集两个集合的交集 + 就是最远节点柳诺:题目大意:给出n个结点(1~n)之间的n条边,问是否能构成一棵树,如果不能构成则输出它有的连通分量个数,如果能构成一棵树,输出能构成最深的树的高度时,树的根结点。如果有多个,按照从小到大输出。分析:首先深度优先搜索判断它有几个连通分量。如果有多个,那就输出Error: x components,如果只有一个,就两次深度优先搜索,先从一个结点dfs后保.原创 2021-04-23 11:15:28 · 124 阅读 · 0 评论 -
1099 Build A Binary Search Tree (30 分)
题解好题!!!如果我去年天梯赛之前就做过的话 真的是好题了这个题和去年天梯L2的搜索树 有相似的地方我去年还不怎么会建树 以为那个题可以退出来的结果不是,是按着他给的一个遍历序列 在过一遍,以此填进去这个题是给了二叉树的模板,那个题也差不多是给了因为 那个题说的是完全二叉树所以和给差不多真·题解: 在二叉搜索树的性质中,中序遍历序列是顺序的所以将给出的数据,排序,就是中序序列。故,知道了中序序列和二叉树的样子,那么就可以得到整个二叉树得到的过程就是一个基本的树的遍历#inclu原创 2021-04-22 21:01:58 · 120 阅读 · 0 评论 -
1147 Heaps (30 分)
题解感觉这个30分的题,算是比较简单了大意:判断堆的类型:大顶堆 小顶堆 不是堆不管怎么样 都输出他的后序遍历序列判断的时候需要注意一下最好是从N --> 2来判断,这样可以减去边界条件的判断如果h[i] > h[i/2] 是小顶堆如果h[i] < h[i/2] 是大顶堆如果都满足,说明不是堆Code#include <iostream>#include <algorithm>using namespace std;const int n原创 2021-04-22 17:29:34 · 65 阅读 · 1 评论 -
1098 Insertion or Heap Sort (25 分)
题解现在脑子比较慢,看了柳神的题解,她的题解真的太好看了看一遍 感觉不到多余的代码 并且可读性强????在这里写博,仅是个人的笔记使用并且感觉写博客有助于清晰思路题解需要两种情况:插入排序:前几个元素是顺序的,后几个元素和初始序列的顺序一致堆排序 :后几个元素是顺序的,前几个元素是一个大顶堆解决:插入排序:找到两个部分(顺序和不是顺序)的分界点 对前几个元素的个数+1 的个数 行进sort堆排序 :找到分界点,很容易发现,b[1]是大顶堆的最大值,而一定是已经排过序的元素的最原创 2021-04-22 17:17:32 · 62 阅读 · 0 评论 -
1147 Heaps
题解:相当于于对堆的基本应用首先从2-n遍历,确定堆的类型然后dfs后序遍历Code:#include <iostream>#include <vector>using namespace std;int N, M;vector<int> v;// 后续遍历树void dfs(int k){ // 超过范围 if (k > M) return; dfs(k * 2); dfs(k * 2 +原创 2020-11-26 10:24:32 · 126 阅读 · 0 评论