自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(223)
  • 收藏
  • 关注

原创 P3958 [NOIP2017 提高组] 奶酪

难度:3知识点:连通性的判断这道题看上去很唬人,实际上很简单,就是连通性的判断,可以用并查集,也可以用dfs,这里只用了并查集,思路很简单,就是输入的时候我们要处理三个东西,一个是谁和入口相连统计一下,谁和出口相连统计一下,然后用n方来做并查集处理,哪两个是相连的,让他们连一下,然后就是遍历出口和入口,有一个是相连的就说明可以,反之则说明不行,#include <bits/stdc++.h>#define fi first#define se second#define pb pu

2021-07-25 19:04:10 211

原创 CF377A Maze

难度:3知识点:搜索题意:给定一个地图,所有的空地都四联通,现在让你把k个空地变成墙,然后剩下的空地还保持联通,输出你修改之后的地图,这个题正确答案有很多,取决于你的写法,我用的是bfs,并且从左上角的空地开始,思路很简单,把所有空地标记层数,然后依次把最外层的空地变成障碍物就行了,dfs貌似也能写,但是还没有尝试#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define

2021-07-23 04:06:06 273

原创 P1394 山上的国度

难度:3知识点:图的遍历感觉这道题算是3里面比较简单的了,因为限制条件比较多,题目说如果两个海拔一样的是不能互相水流动的,那么为了有符合条件的点,最高点必须只有一个,如果这个都不满足,那么一定找不到,然后这个条件满足了,再去dfs,判断是不是所有的都能遍历到,也就是图联通,就是判定能不能往下搜索里面要加一条关于海拔的判断,就可以了,很简单的一道题我看洛谷里面的题解用什么方法的都有。。。#include <bits/stdc++.h>#define fi first#define se

2021-07-23 02:31:44 331

原创 CF329B Biridian Forest

难度:4知识点:广度优先搜索又是一道偏简单的难度为4的题目,就是裸的广搜,题目给的地图是数字的话,表示这个点的人数,然后题目问的是在你到达终点之前有多少人能到达,包括和你同时到达的,思路就很简单了,从终点开始搜,只要距离小于等于你的距离的,都累加上人数,然后这里dist为了方便判断,可以初始化为无穷大,在搜索的过程种顺道更新dist,不耽误后面用,#include <bits/stdc++.h>#define fi first#define se second#define pb

2021-07-19 02:56:46 224

原创 P1189 `SEARCH`

难度:4知识点:模拟这道题我是训练bfs的时候搜到的,但是其实不是bfs,就是一个模拟题,需要用到队列罢了,做题的时候自己在纸上模拟一下,就可以写出来了,关键点是,我们用一个队列来存储我们要移动的点,移动之前先出队,然后vis设置为0,然后我们按照先后顺序对这些点开始找在这个方向上它能到的点,终点是障碍物,而不是已经访问过的点,万一这个已经访问过的点的那一边还有能停车的地方呢,这个需要注意不要写错,最后vis数组为1的就是能停车的地方,输出即可#include <bits/stdc++.h&gt

2021-07-18 20:46:48 172

原创 UVA532 Dungeon Master

难度:4知识点:广度优先搜索这道题算是比较简单的了,相对于它的难度分级来说,就是一个三维状态空间的无权图最短路,用bfs跑一边就行了,算是一个比较基础,来检验你bfs基本功底的题目,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define mk make_pair#define sz(x) ((int) x.size())#define all(x) (x).beg

2021-07-18 19:59:59 170

原创 P3855 [TJOI2008]Binary Land

难度:4知识点:广度优先搜索又解决一道,这道题首先状态很好想,就是一个四维数组,两个点的坐标共四个数来组成一个状态,起点状态终点状态也显而易见,然后是蜘蛛网,这个东西有点迷惑性,题目说的是如果踩了就失败,其实这玩意儿就是个路障,和障碍一样,你碰到了不走,就行,没有说非要你遇见了就去走,然后就是本题最难的一个点了,两个点的移动,题目说了两个点是一起移动,如果其中一个点遇到了障碍,那么可以不动,只移动另外一个点,言外之意就是假如两个点都能移动的时候必须两个点都要移动,不能两个点都能移动的时候只移动其中一个

2021-07-18 18:31:43 178

原创 P3663 [USACO17FEB]Why Did the Cow Cross the Road III S

难度:4知识点:广度优先搜索当然,这道题用深度优先搜索也是一个样,,,只是这时最近训练第一个不看题解就很快写出来的题,题意就是,给一个地图,划分成不同的连通块,然后给一些牛,如果两个牛不在同一个连通块里面就称为一对,问对数是多少,这时思路就很简单了,用深搜或者广搜给地图上标记,标记是第几个连通块,然后输入牛,它所在的连通块+1,最后把连通块里面牛的个数不为零的取出来,两两相乘相加就行了,这里一个程序实现的细节就是如何划分连通块,这个地图是传统的二维数组的形式给的,然后输入若干对两个点,这两个点是相邻的

2021-07-18 16:20:44 112

原创 P1032 [NOIP2002 提高组] 字串变换

难度:4知识点:广度优先搜索题目说这道题可能是错题,但是还是把它做了,用的就是广搜,然后需要注意的就是最后一个测试点,可以替换的字符串可能再目标字符串里面多次出现,所以我们构造目标字符串的时候要从前向后遍历的,详细的寻找一下可替换的子串的位置,总结:复习了一下string的用法#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.si

2021-07-18 15:10:49 372

原创 P3818 小A和uim之大逃离 II

难度:4知识点:广度优先搜索这个题只要状态想对了就很简单,状态再加上一维,就是到了这个点用过瞬移的次数,显然第三维只有0和1两种#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x).begin(), (x).end()using namespace std;typedef l

2021-07-18 04:47:08 126

原创 P1902 刺杀大使

难度:4知识点:二分,广度优先搜索做这道题的时候我就在感慨,掌握一个知识点是你在考场上看到一道新题自己能独立解决这才叫掌握了知识点,这道题因为瞄了一眼分类,发现是二分和bfs,就不自主的往那个方面想,结果真的很简单,因为题目里面也有,这道题是最小化最大值,是最小化的二分,单调性是显然的,有那么一个最小的一条路径的最大值,比这个值大肯定能通过,小了就不行了,然后就是二分判定,这里的判定函数就是bfs,然后别看题目说的那么花哨,其实就是你能从第一行任意一点出发就行,能到达最后一行的任意点就行了,不要求路径的

2021-07-17 19:16:37 94

原创 P2199 最后的迷宫

难度:4知识点:广度优先搜索不容易,这个题写了太久,首先说一下思路,就是你走到能看到奖杯的那个位置之后就已经能拿到奖杯了,首先我们需要一个bfs函数,一般做法就是每出队一个点,可以判断一下这个点是不是能看到奖杯,但是这样太麻烦,我们先做一下预处理,因为看到是相互的,我们能看到奖杯,那么奖杯也能看到我们,先根据输入预处理出来奖杯能看到的地点,然后bfs走到这个位置的时候就可以输出了,这道题浪费了好久时间还有一个原因就是输入看反了,里面是先输入奖杯也就是终点的位置,然后才是人的位置也就是起点的位置,感觉这道

2021-07-17 17:27:36 221

原创 P6207 [USACO06OCT] Cows on Skates G

难度:3知识点:广度优先搜索这道题完全是刘汝佳bfs例题的破产版,就是求任意一条无权图最短路打印出来就可以了,然后因为练习过刘书的缘故,这道题也是10分钟之内就解决了,但是现在掌握的只有打印随便一条最短路径,打印所有的还没有熟练掌握。#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x

2021-07-17 04:37:18 133

原创 P1332 血色先锋队

难度:3知识点:广度优先搜索做之前还是看了一下题解,为的是看看考察的知识点是不是我想练习的,然后觉得题目太长,看看总结好的题意,但是也顺道看了解题思路,就是初始有一些感染源,按照四联通向周围感染,然后给你查询,问查询点都是啥时候被感染的,这个和广度优先搜索的背景很像,那些感染源其实都是出发点,问的就是地图上的点被这些所有出发点其中一个到达时间最小是多少,按照bfs来写就可以了#include <bits/stdc++.h>#define fi first#define se seco

2021-07-17 04:22:42 417

原创 1014 Circles of Friends (35 分)

知识点:图的遍历以前我以为这道题太简单了,今天又看看,确实是比30分的题逼格高那么一些,就是图论的东西想明白就行,首先是连通块的个数,这个比较简单,但是这个遍历和以前的不一样,每个点都要遍历来算它的那个最大值,因为举个例子你会发现,对一个连通块,如果起点不一样,那么相对于它的结果就不一样,题目说的一个连通块的距离应该就是里面所有人的距离的最大值,所以这道题不一样的地方就是要设定两个访问数组,一个是来统计连通块用,全局变量,一直使用,一个是以每个点为起点遍历时用的,仅在当前这次bfs内使用,这个想明白了就行

2021-07-15 23:03:42 156

原创 P1341 无序字母对

难度:4知识点:欧拉回路这道题是要打印欧拉回路或者欧拉路径,因为题目里面说了字母可以任意互换,所以其实这个图论模型就是一个无向图,因为它是可以从前一个字母到后一个字母,也可以从后一个字母到前一个字母,先建图统计度数,奇数点个数为1或者大于2,那么直接无解,然后是度数等于2,这个时候只有一种情况,从小字母出发到大字母,这种路径只有一条,打印输出即可,后来想一想,万一两个字母一样大,但是这两条路径中间的字典序不一样怎么办,那样的话应该把两条路径都打印出来比较输出,但是我没这么写题目就过了,下次有机会在写

2021-07-15 16:35:49 106

原创 P2853 [USACO06DEC]Cow Picnic S

难度:3知识点:图的遍历思路:反向建图,然后对每个点dfs,判断这个点是不是能到达所有有奶牛的点,思路很简单,然后这里有一个很坑的点,就是可能有多个奶牛在同一个点,所以我们的hash数组要储存的是这个点的奶牛的数量,每次访问这个点的时候就加上这个点的奶牛的数量,这次dfs完了之后,看看累加的奶牛的数量是不是题目给的奶牛的数量,如果是,那么这个点就可以作为奶牛聚餐的地点,#include <bits/stdc++.h>#define fi first#define se second

2021-07-15 14:27:25 171

原创 1076 Forwards on Weibo (30 分)

知识点:图的遍历用了邻接表我也不知道为啥变慢了,然后本题比较适合使用bfs,如果用dfs的话比较难,考验你的水平,可以尝试,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x).begin(), (x).end()using namespace std;typedef long

2021-07-15 13:47:52 112

原创 1021 Deepest Root (25 分)

知识点:图的dfs一开始这道题写错了不知道为题出在哪里,后来发现了,是邻接表的两个数组开小了,这两个数组大小是由边的个数决定的,而不是点的个数,这个要想明白,然后就是本题的做法了,先判断是不是一个连通块,然后就是暴力dfs,求以每一个顶点的为根的树的最大深度,最后统计答案输出即可#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.siz

2021-07-15 13:20:31 108

原创 P3916 图的遍历

难度:4知识点:图的dfs这道题暴力显然会超时,也就是我们求一个点能到达的最大的编号,一个比较巧妙的做法是,我们建立一个反向的图,然后从大到小对点进行dfs遍历,然后当前点能到达的点的答案就是当前点,因为是按照从大到小的顺序的,第一次就能求出解,设置一个全局变量记录结果就行#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size(

2021-07-14 19:59:14 94

原创 UVA127 纸牌游戏 “Accordian“ Patience

难度:3知识点:链表用vector模拟链表,一共两个,一个储存每个牌堆,一个储存非空牌堆的编号,开一个while循环,每次都从前向后遍历,每次只移动一个,移动完就下次while循环从新还是遍历非空牌堆编号,其它的就是模拟了,注意细节含义即可,总结:练习了vector模拟链式结构,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.s

2021-07-14 17:45:31 139

原创 P5018 [NOIP2018 普及组] 对称二叉树

难度:4知识点:二叉树题意:给你一个二叉树,让你找这个二叉树里面节点数最多的对称子树,这道题我看题解有O(n)的做法,不会,然后我这个是用的最简单的暴力法,递归判断,用的先序,只要当前点为节点的子树是对称的话,那么就没有必要往下判断了,因为就算后面还有对称的子树,它的节点数也不会超过当前点,然后就是怎么判断一个树是不是对称的,我们可以把这个问题转化为判断两个树是不是一样的,第二个树就是第一个树所有左右儿子颠倒之后得到的树,判断函数的逻辑也比较简单,都空返回是,其中有一个不空返回否,能进行到这里说明都不

2021-07-14 15:42:13 285

原创 UVA10410 树重建 Tree Reconstruction

难度:4知识点:多叉树,dfs,bfs题意很简单,根据先序和层序遍历还原二叉树,思路就是遍历先序序列,然后从当前数的前面找它的父亲节点,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x).begin(), (x).end()using namespace std;typed

2021-07-13 19:37:38 130

原创 P1229 遍历问题

难度:3知识点:二叉树这道题问的是,知道一个二叉树的先序遍历和后序遍历,问可能的二叉树的数量,其实就是找二叉树里面只有一个孩子的节点的数目,然后求2的多少次方就可以了,书上有一种直接遍历的简单写法,没有看懂,还是用的比较老套的递归#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x).

2021-07-13 12:54:34 152

原创 P5076 【深基16.例7】普通二叉树(简化版)

难度:4知识点:二叉搜索树让写一个二叉搜索树,这里没有手写,而是用了multiset,十分方便,待会儿补一下手写二叉搜索树的写法,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x).begin(), (x).end()using namespace std;typedef

2021-07-13 12:50:09 119

原创 1119 Pre- and Post-order Traversals (30 分)

先说结论,树里面有只有一个孩子的节点,那么这个二叉树就不能由先序遍历和后序遍历唯一确定,所以中间判断的时候以这个为判断依据,然后是本题的输出,最后要输出一个换行,不然会有格式错误,这是一个很不专业的地方,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x).begin(), (x).en

2021-07-13 01:22:37 76

原创 1151 LCA in a Binary Tree (30 分)

这次的比上个稍微难了一点,没有了二叉搜索树的性质,就是一个二叉树,那么方法就是暴力递归找,当前根节点就是先序序列的第一个数,先看两个数里面有没有等于当前根节点的,有的话就输出,没有的话,如果两个节点的下标在根节点的左右两侧,用中序序列判断,那么当前根节点就是答案,否则判断向左向右递归解决,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x

2021-07-12 18:13:35 122

原创 1143 Lowest Common Ancestor (30 分)

第一次遇见的时候觉得眼前一亮的题目,用二叉搜索树的性质来找最近公共祖先,首先两个数不是互相的最近公共祖先,那么它们的最近公共祖先就是这两个数出现之前,大于最小值,小于最大值的值,然后就是其中一个是另外一个的祖先的情况,如果没有找到上述满足条件的数,那么先遍历找到的那个数就是祖先,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size

2021-07-12 17:29:44 62

原创 1064 Complete Binary Search Tree (30 分)

这道题的通过率0.59,可见这道题多么的简单,作为一个30分的题,如果二叉树的是一个完全二叉树,那么它的形态已经被确定了,然后又因为二叉搜索树的中序序列的性质,直接往已经确定形状的二叉树里面填数字就可以了,层序遍历以是下标1到n就可以了#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x

2021-07-12 17:12:45 91

原创 1053 Path of Equal Weight (30 分)

多叉树的dfs,要求找出所有与给定数据相等的路径,然后按照降序输出,这个题可以直接在dfs的时候输出,做法就是在输入的时候对每个叶子的节点都按照从大到小的顺序排序即可,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x).begin(), (x).end()using namespa

2021-07-12 17:00:39 68

原创 1106 Lowest Price in Supply Chain (25 分)

多叉树的遍历,下标(地址)和自己节点的数据是一样的,就可以用这种比较简单的储存方法,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x).begin(), (x).end()using namespace std;typedef long long ll;typedef vec

2021-07-12 16:44:06 80

原创 1094 The Largest Generation (25 分)

多叉树的遍历,感觉pat25分的题的难度也就是普及-#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x).begin(), (x).end()using namespace std;typedef long long ll;typedef vector<int> v

2021-07-12 16:32:34 62

原创 1079 Total Sales of Supply Chain (25 分)

多叉树的遍历,pat的题还是用scanf输入比较好,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define sz(x) ((int) x.size())#define all(x) (x).begin(), (x).end()using namespace std;typedef long long ll;typedef vector<int> v

2021-07-12 16:23:14 84

原创 1127 ZigZagging on a Tree (30 分)

蛇形输出层序遍历,这个只要记录每一层的遍历序列,然后输出之前该翻转的翻转一下就可以了,然后看了看自己一年之前提交的,思路真的是一模一样,就是代码风格变了,#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define all(x) (x).begin(), (x).end()using namespace std;typedef long long ll;typedef

2021-07-10 13:51:33 96

原创 1110 Complete Binary Tree (25 分)

判断一棵二叉树是不是完全二叉树,这个感觉用层序遍历比较合适,然后就是层序遍历里面的分类讨论,如果这个节点有右儿子没有左儿子,那么直接返回,同理,直接向下分类讨论,设立了两个标记变量,讨论输出即可#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define all(x) (x).begin(), (x).end()using namespace std;typedef l

2021-07-10 13:23:46 122

原创 1004 Counting Leaves (30 分)

给一个多叉树,让你输出每一层的叶子节点的数目#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define all(x) (x).begin(), (x).end()using namespace std;typedef long long ll;typedef vector<int> vi;typedef pair<int, int> pa;

2021-07-10 13:07:23 79

原创 1138 Postorder Traversal (25 分)

这道题的数据稍微有点大,但是题目问的也是比较限制特殊情况,那就是输出后续遍历的第一个节点,后续遍历的特点就是先左后右再根,所以我们可以在递归的时候按照优先级来递归,避免无效递归,如果有左节点,那就向左递归,这时候不管右边有没有都向左递归,如果没有左节点有右节点,那么就向右边递归,如果左右节点都没有,那么就是到头了,输出答案即可,然后还有一个可以优化的地方就是用map来记录中序遍历的位置,最后40ms即可通过,#include <bits/stdc++.h>#define fi first

2021-07-09 11:24:17 125

原创 1102 Invert a Binary Tree (25 分)

翻转二叉树和镜像树一样,就是你遍历的时候都是按照相反的顺序,先遍历右结点,然后再遍历左结点,这样你遍历的就是原树的镜像树了#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define all(x) (x).begin(), (x).end()using namespace std;typedef long long ll;typedef vector<int&g

2021-07-09 10:47:58 70

原创 PAT甲级题解目录

编号题目分类1020Tree Traversals (25 分)二叉树1043Is It a Binary Search Tree (25 分)二叉搜索树1085Perfect Sequence (25 分)二分 / 散列1086Tree Traversals Again (25 分)二叉树1099Build A Binary Search Tree (30 分)二叉搜索树...

2021-07-08 18:36:55 370

原创 P1766 液体滴落

难度:4知识点:模拟这道题一开始看见数据范围是10的5次方,怎么都想不起来好的做法,一看题解,这道题可以n的平方过,索性就去写了,注意模拟的细节即可,后来想了想也不知道有什么好的贪心优化的方法,就是按照线段的高低排位,可能有那么一点用,但是也完全不是线性扫描,就这样把#include <bits/stdc++.h>#define fi first#define se second#define pb push_back#define all(x) (x).begin(), (x)

2021-07-08 17:31:39 106

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除