写在前面
这里用来记录PAT解题的一些考点,注意事项,源代码请到这里[link]去找. 按照题号写的, “XX_w2.cpp”是参考的大神的代码
2020.5.16
1106 Lowest Price in Supply Chain
同类题目:
- 求叶子结点的最小层
- 有向无权图的单元最短路的条数
考点: 利用 图的DFS / BFS 求叶子结点的最小层(要减枝,不然会超时)
利用vector<int> Nodes[max] 构建邻接链表
问题
- 结果要求保留小数点后4位, 需要控制输出格式 , cout<<setiosflag(ios::fixed)<<setprecision(4)<<…
- 一般用double代替float,保留一定的精度
- 边界min_depth的初值我设置成9999, 有点小,卡了三个样例,要注意边界值的设置
- bfs,我经常容易忘记结点出队/=,害
1115 Counting Nodes in a BST
- 计算BST中最低层和次低层的结点的个数
相关考点:
1. BST的构建--insert,creatBST模板函数 2. DFS
问题:
这次还是边界设置错啦,–int depth=-1; //只有一个结点的时候,出错
1114 Family Property
- 统计求集合的并集,并集合中的信息
相关考点:
1.并查集的find 和 union 模板(==遗留问题, 路径压缩的并查集和非路径压缩有什么区别??,这里带路径压缩的find会导致出错)
这里的4位的id是直接用int来表示的,方便并查集的实现;不过最后的输出格式要额外处理
- 如何把int转换成string,并且高位用0填充
- char des[10] ; int src = 1998 ;
- sprintf(des,”%04d”,src); //把src转换为4位的string,并用0填充,转换的结果存储到des中.
经常开一个比较大的数组作为全局变量.节省一些处理.
这道题开大数组,索引起来特别方便.不过要增加一个vis[10000]数组表示id是有效的.
(自己做题总是小心翼翼,不想浪费太多的空间)
这道题数据处理的过程,可以多学习一些,自定义了两个struct,一个用来处理输入(输入一个结点,进行一次union操作,int father[]用来保存并查集结构) ;另外一个用来处理输出,(保存每个集合的统计信息)
1126 Eulerian Path
判断图是否是欧拉图,半欧拉图,非欧拉图
欧拉图的定义
欧拉回路:图G中经过每条边一次并且仅一次的回路称作欧拉回路
欧拉通路:图G中经过每条边一次并且仅一次的路径称作欧拉通路。
欧拉图(Eulerian graph)指的就是存在欧拉回路的图。
半欧拉图(semi-Eulerian graph)指的是存在欧拉通路但不存在欧拉回路的图。1.无向图中:
无向图G为欧拉图,当且仅当G为连通图且所有顶点的度为偶数。
无向图G为半欧拉图,当且仅当G为连通图且除了两个顶点的度为奇数之外,其它所有顶点的度为偶数。
2.有向图中:
有向图G为欧拉图,当且仅当G为连通图,且所有顶点的入度等于出度。
有向图G为半欧拉图,当且仅当G为连通图,且存在顶点u的入度比出度大1,v的入度比出度小1,其它所有顶点的入度等于出度。
基本思路:
- 统计所有顶点的度,计算度为奇数的结点的个数
- 判断该图是否是连通图
考点
如何判断是否是连通图?
1.利用并查集(在接收输入时,构建并查集) ,时间复杂度
2. 一次深搜DFS ,时间复杂度: