图
文章平均质量分 90
图的学习
yc_cy1999
一只喜欢cc和想去南大的小羊
展开
-
721. Accounts Merge【并查集】⭐
文章目录题目描述知识点我的实现码前思考代码实现时空复杂度分析码后反思参考文档题目描述知识点并查集我的实现码前思考对于这种集合合并的问题,并查集最适合了。代码实现//感觉可以先使用排序进行同名分组,再在组里面进行小范围的并查集合并。//但是我直接使用并查集算了class Djset{ public: vector<int> parent; //记录节点的根 vector<int> rank; //记录根节点的深度(用.原创 2021-01-19 09:15:15 · 249 阅读 · 0 评论 -
PAT A1131 Subway Map (30分)【DFS求最短路径】⭐⭐⭐⭐⭐
文章目录题目描述知识点我的实现码前思考代码实现码后反思题目描述1131 Subway Map (30分)给一张map,求map中某点到某点的最短距离。知识点图的DFS我的实现码前思考我第一次写的时候用的是Dijkstra,结果超时了,所以一直都没改正。这一次写的时候参考了柳神的代码,使用了DFS的方式来求解问题。很奇怪的是,DFS这么暴力的方法,居然也可以做到不超时,实在是令人匪夷所思!!!代码实现#include <iostream>#include <ve.原创 2020-08-23 14:54:19 · 188 阅读 · 0 评论 -
Jungle Roads【最小生成树模板题】
文章目录题目描述知识点我的实现码前思考代码实现码后反思题目描述就是裸的最小生成树知识点最小生成树我的实现码前思考考虑到多条边的情况,使用邻接表;考虑顶点数固定,使用prim~代码实现//对于这种图的顶点比较少的图,我们使用prim#include <iostream>#include <vector>#include <algorithm>using namespace std;const int maxn = 30;const int.原创 2020-08-22 17:47:42 · 99 阅读 · 0 评论 -
【图的DFS遍历】PAT A1013 Battle Over Cities (25分)
文章目录题目描述知识点我的实现码前思考代码实现码后反思题目描述知识点图的遍历我的实现码前思考就是求图中的连通块的数量代码实现//建议使用邻接表进行访问 #include <iostream>#include <vector>#include <algorithm>using namespace std;const int maxn = 1010;//共享数据结构的初始化bool vis[maxn];vector<int>.原创 2020-08-21 15:43:43 · 121 阅读 · 0 评论 -
HDOJ 4109. Instructions Arrangement【关键路径+拓扑排序+动态规划+记忆化搜索】⭐⭐⭐⭐⭐
文章目录题目描述代码实现码后反思题目描述代码实现//使用动态规划解题,同时需要记录开始和结束时间//数组下标是从0开始的 #include <cstdio>#include <vector>#include <queue>#include <algorithm>using namespace std;const int maxn = 1010;const int inf = 0x3fffffff;int n;int m;str.原创 2020-06-28 17:46:55 · 313 阅读 · 0 评论 -
【拓扑排序】确定比赛名次
文章目录题目描述代码实现码后反思题目描述代码实现//拓扑排序模板题,注意使用优先队列 #include <cstdio>#include <vector>#include <queue>#include <algorithm>using namespace std;const int maxn = 510;vector<int> output;vector<int> adj[maxn];int n;int.原创 2020-06-28 15:50:53 · 209 阅读 · 0 评论 -
【裸的拓扑排序模板题】Legal or Not
文章目录题目描述代码实现码后反思题目描述裸的拓扑排序代码实现//拓扑排序模板题 #include <cstdio>#include <queue>#include <vector>#include <algorithm>using namespace std;const int maxn = 110;int n,m;int ind[maxn]; //入度表示有徒弟 vector<int> adj[maxn];vo.原创 2020-06-27 19:14:12 · 128 阅读 · 0 评论 -
【最小生成树模板题】继续畅通工程
文章目录题目描述代码实现码后反思题目描述代码实现//直接将修通的看作成本为0不就好了?#include <cstdio>#include <algorithm>using namespace std;const int maxn = 5000;struct edge{ int u; int v; int c;};edge edges[maxn];int father[maxn];int n;int m;bool cmp(edge a,edg.原创 2020-06-27 17:40:04 · 137 阅读 · 0 评论 -
【最小生成树两种方法】还是畅通工程
文章目录题目描述代码实现码后反思题目描述代码实现prim实现版本://最小生成树问题//使用prim算法#include "bits/stdc++.h" using namespace std; //最大的顶点数const int MAXV = 110; //不可达的距离const int INF = 0x3fffffff; //由于n<100,所以采用邻接表的方式进行存储图int G[MAXV][MAXV]; //输入的顶点数int n; //是否已经.原创 2020-06-27 17:15:30 · 181 阅读 · 0 评论 -
⭐⭐⭐【DFS+理解题意】找出直系亲属
文章目录题目描述代码实现码后反思题目描述代码实现//我觉得使用DFS更简单易懂一些//采用邻接表记录#include <cstdio>#include <iostream>#include <string>#include <vector>using namespace std;const int maxn = 30;vector<int> adj[maxn];int n;int m;int res;void .原创 2020-06-26 17:11:19 · 257 阅读 · 0 评论 -
⭐⭐⭐⭐⭐【并查集+树】Is It A Tree?
文章目录题目描述代码实现码后反思题目描述代码实现//其实可以不用并查集做吧,直接DFS开搞啊啊 #include <cstdio>#include <unordered_map>using namespace std;const int maxn = 10010;unordered_map<int,int> father;unordered_map<int,int> inDegree;int find(int x){ if(fat.原创 2020-06-26 16:05:10 · 188 阅读 · 0 评论 -
【并查集模板题】连通图
文章目录题目描述代码实现码后反思题目描述代码实现#include <cstdio>const int maxn = 1010;int father[maxn];int n;int m;int find(int x){ if(father[x]==x){ return x; }else{ int root = find(father[x]); father[x]=root; return root; }}void Union(int u,int .原创 2020-06-26 15:15:23 · 105 阅读 · 0 评论 -
【裸的并查集】畅通工程
文章目录题目描述代码实现码后反思题目描述代码实现//感觉使用DFS会更好,但是需要练习并查集写法。。。 //每次读取进行一次合并father,然后看看有多少个father就好 #include <cstdio>#include <unordered_set>using namespace std;const int maxn = 1010;int father[maxn];int n;int m;int find(int x){ if(father[.原创 2020-06-26 15:01:51 · 116 阅读 · 0 评论 -
【知识点6】并查集⭐⭐⭐⭐⭐
目录并查集的定义并查集的基本操作初始化查找合并路径压缩题型训练参考文档并查集的定义并查集是一种维护集合的数据结构,它的名字中“并”、“查”、“集”分别取自Union(合并)、Find(查找)、 Set(集合) 这3个单词。也就是说,并查集支持下面两个操作:合并:合并两个集合。查找:判断两个元素是否在一个集合。那么并查集是用什么实现的呢?其实就是用一个数组:int father[...原创 2020-02-23 13:20:25 · 317 阅读 · 0 评论 -
【图的连通分量+最长路径】PAT A1021 Deepest Root
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述求一个图是否是树,不是树输出连通分量个数。是树,输出最长路径。知识点图的DFS+BFS遍历实现码前思考打算DFS求连通分量,对每个点BFS求最大深度。BFS经常用来求深度的,很好用的。。。代码实现//DFS+BFS进行解题//DFS用于判断连通分量//BFS用于判断层数 //数组下标从1开始 //考虑边界情况,比如只有一个结点 #include <cstdio>#include <vector&.原创 2020-06-03 20:12:26 · 260 阅读 · 0 评论 -
PAT A1018 Public Bike Management【带其他标尺的Dijkstra+DFS】⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点带附加标尺的Dijkstra+DFS实现码前思考这道题目我又没有看懂题意,感觉题意并没有描述清楚啊~~题意的坑:back的自行车不能送回已经遍历过的点。比如2 10,就是send = 3, back = 5 而不是 send = 2, back = 2;题目中说了只能沿途,不能回退。解决了上面题意理解的问题,接下来我又犯了一个错误——我直接在每步DFS中求解need和remain,我忽视了路径是逆序的,所以应该要到.原创 2020-06-01 21:48:13 · 434 阅读 · 0 评论 -
PAT A1013 Battle Over Cities (25分)【图的DFS+连通分量】
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点图的遍历实现码前思考图的dfs,求连通分量哒~记得每次都要初始化vis数组全体为false哈代码实现//图的DFS,计数连通分量//数组下标从1开始 #include <cstdio>#include <algorithm>using namespace std;const int maxn = 1e3+10;int n;int m;int k;int blocked;b.原创 2020-05-31 19:54:46 · 196 阅读 · 0 评论 -
PAT A1072 Gas Station【Dijkstra+堆优化】⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述题目链接从m个加油站里面选取1个站点,让他离居民区的最近的距离是m中最远的,并且没有超出服务范围ds之内。如果有很多个最远的加油站,输出距离所有居民区距离平均值最小的那个。如果平均值还是一样,就输出按照顺序排列加油站编号最小的那个知识点Dijkstra单源最短路径实现码前思考这道题目,我看题目看了半天,才理解了A gas station has to be built at such a location that the.原创 2020-05-25 21:35:21 · 154 阅读 · 0 评论 -
PAT A1087 All Roads Lead to Rome【DIjkstra+DFS】
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述多重条件Dijkstra知识点图的最短路径,Dijkstra实现码前思考只是在裸的Dijkstra算法上增加了happiness和average happiness的比较;需要注意的是需要输出最短路径的条数,需要每次都记录下来;第一个路径是不计入average happiness的计算的;代码实现#include <iostream>#include <cstring>#include &l.原创 2020-05-24 18:56:34 · 279 阅读 · 0 评论 -
PAT A1154 Vertex Coloring⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点图的着色实现码前思考这道题考点就是图的遍历DFS~,跟二部图的着色问题很类似;记得提前设置一个flag变量,一旦出现不匹配就立刻停止DFS,这样时间会好一些。代码实现//顶点下标从0开始编号 #include "bits/stdc++.h"using namespace std;const int maxn = 1e4+10;vector<int> adj[maxn];//表示是否被访问 b.原创 2020-05-10 19:04:24 · 91 阅读 · 0 评论 -
PAT A1150 Travelling Salesman Problem
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述1150 Travelling Salesman Problem (25分)知识点图实现码前思考我的思路是:判断是否为连通路径;判断起点和终点是否相等;判断是否覆盖所有结点;判断是否是简单环。代码实现#include "bits/stdc++.h"using namespace std;const int maxn = 250; //采用邻接矩阵来记录int G[maxn][maxn];int n;in.原创 2020-05-09 19:05:50 · 82 阅读 · 0 评论 -
PAT A1149 Dangerous Goods Packaging【稀疏图考虑边】⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前实现代码实现码后反思题目描述知识点图实现码前实现这道题我写错了,我一开始是这样写的:上面的分析确实有道理,如果一直两两点比较,那么就是组合数了,时间复杂度变成了103×103=10610^3 \times 10^3 = 10^6103×103=106。但是,如果只是遍历边的话,那么最多也只有2×1042 \times 10^42×104的时间复杂度!因此,每次都是扫描该点的所有不匹配点是否出现在了之前的数字中。代码实现#include "bits.原创 2020-05-09 18:58:39 · 132 阅读 · 0 评论 -
PAT A1146 Topological Order【一道敲响警钟的拓扑排序错题】⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述1146 Topological Order (25分)知识点拓扑排序实现码前思考模拟拓扑排序题,没啥讲的代码实现//是否要判断本身是否为有向无环图?不用! //结点标号是从1开始的 #include "bits/stdc++.h"using namespace std;const int maxn = ...原创 2020-05-08 17:23:18 · 125 阅读 · 0 评论 -
PAT A1142 Maximal Clique【团】
文章目录题目描述知识点实现码前思考代码实现码后反思clique——集团题目描述知识点图实现码前思考整体分两步走:判断是否是Clique;判断是否是Maximal Clique。此外需要注意一些细节:题中给的结点数很小,因此直接使用邻接矩阵就好了,不需要使用邻接表;整个题目的解法就是普通思路,没有什么特别需要思考的地方。代码实现//采用邻接矩阵进行求解...原创 2020-05-07 17:30:05 · 113 阅读 · 0 评论 -
二分图
文章目录1. 二分图1.1 定义1.2 性质1.3 判定二分图的匹配匈牙利算法题型训练1. 二分图1.1 定义二分图又称作二部图,是图论中的一种特殊模型。设G=(V, E)是一个无向图。如果顶点集 V可分割为两个互不相交的子集X和Y,并且图中每条边连接的两个顶点一个在 X中,另一个在 Y中,则称图G为二分图。1.2 性质定理:当且仅当无向图G的每一个环的结点数均是偶数时,图G才是...原创 2020-05-05 23:51:37 · 434 阅读 · 0 评论 -
LeetCode 886. Possible Bipartition
文章目录题目描述结果知识点实现码前思考代码实现码后反思题目描述结果知识点图的遍历BFS+DFS,二分图实现码前思考二分图题就是图顶点着色问题,就是在图DFS上增加一些额外的操作,模板还是DFS的!注意非连通图的情况!代码实现//数组下标从1开始class Solution {private: const static int maxn = 2010;...原创 2020-05-05 23:34:27 · 112 阅读 · 0 评论 -
LeetCode 785. Is Graph Bipartite?
文章目录题目描述结果知识点实现码前思考代码实现码后反思题目描述结果知识点图的遍历BFS+DFS、二分图实现码前思考这道题目是我专门找的二分图来做练习的,利用这道题回忆了一下二分图的概念!其实发现一个套路,当你去解决一道图的时候,发现没有思路,那么基本上 要往DFS或者BFS上面去靠 ,毕竟考点也就那么一些嘛~利用二分图的性质:相邻的两个点必须属于两个不同的集合,然后去遍...原创 2020-05-05 22:59:23 · 178 阅读 · 0 评论 -
PAT A1139 First Contact (30分)【哈希存储边】⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述1139 First Contact (30分)知识点图实现码前思考首先看到可能有10000个结点,肯定不能使用邻接矩阵,会爆炸的,得使用邻接表;我一开始想的是使用DFS去判断的,结果最后一个测试用例运行超时了;我第二个测试用例也没有过,因为居然存在-0000这种奇葩情况!!!后来看了柳神的代码,简直不要太清晰!...原创 2020-05-05 21:09:01 · 349 阅读 · 0 评论 -
PAT A1134 Vertex Cover【对边进行哈希】⭐⭐⭐⭐⭐
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点图、STL实现码前思考由于之前看了柳神的某一题的题解,想到了使用u*10000+v对边进行标记,但是我还是道行不够深。。。代码实现#include "bits/stdc++.h"using namespace std;const int maxn = 1e4+10; const int multi = ...原创 2020-05-04 19:16:46 · 141 阅读 · 0 评论 -
PAT A1126 Eulerian Path【欧拉图判定】
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点图实现码前思考三步走:判断连通图;每个点的度都为偶数;如果违反2,那么只能有且仅有两个点度为奇数。代码实现#include "bits/stdc++.h"using namespace std;const int maxn = 550;vector<int> adj[maxn];...原创 2020-05-02 16:27:33 · 145 阅读 · 0 评论 -
PAT A1122 Hamiltonian Cycle【哈密尔顿图】
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述知识点图实现码前思考对于一个能构成最简单的圈的路径,它需要满足下面的性质:不重复的边数应该是n(边数可能是>n);每条边都是合法边;读取完路径之后,图中所有节点的度都为2.根据上面的分析就能写出代码了。代码实现//使用临界矩阵进行解题 #include "bits/stdc++.h"using n...原创 2020-05-01 19:43:51 · 232 阅读 · 0 评论 -
PAT A1111 Online Map【单源最短路径】
文章目录题目描述知识点实现码前思考代码实现码后反思题目描述题目太长了知识点单源最短路径实现码前思考就是两个使用了第二标度的单元最短路径模板题。代码实现//使用两次单源最短路径 //使用邻接表进行存储 #include "bits/stdc++.h"using namespace std;const int maxn = 510;struct node{ i...原创 2020-04-28 21:15:50 · 185 阅读 · 0 评论 -
LeetCode 1129. Shortest Path with Alternating Colors
文章目录题目知识点结果实现码前思考题目知识点BFS结果时间空间都是是很好,但是不算太差了,正常机试要求都是1000ms和32MB啦。实现码前思考...原创 2020-03-23 18:57:08 · 258 阅读 · 0 评论 -
LeetCode 684. Redundant Connection
文章目录知识点结果实现码前思考代码码后反思知识点并查集结果实现码前思考在草稿纸上模拟加边的过程,发现当对同一棵树上的两个节点加边时,这条边就是答案要求的冗余边。因此,应该要解题的核心就是判断两个顶点是否在一棵树中,很容易想到并查集。代码//无向图//编号从1开始!//结点的个数最多是1000//其实可以看作是树的合并,最开始每个节点相当于是一棵树//因此可以使用并...原创 2020-03-22 20:08:39 · 124 阅读 · 0 评论 -
LeetCode 399. Evaluate Division
文章目录知识点结果实现码前思路代码码后反思知识点并查集结果实现码前思路首先,根据我们输入的除法等式,我们可以想到字符串们应该会变成一个个连通分量(也就是一个个集合),每一个集合里都要选取一个字符串作为“基准”,集合里的字符串都与这个“基准”成一个倍数关系,这样方便了除法运算;判断两个字符串是否可以相除,就是判断两个字符串是否处于同一个集合之中;综合上面两点——“基准”和“是...原创 2020-03-21 23:09:10 · 174 阅读 · 0 评论 -
LeetCode 310. Minimum Height Trees
文章目录知识点结果菜鸡的DFS+记忆化网友的BFS“剥洋葱”实现菜鸡的DFS+记忆化代码反思网友的BFS“剥洋葱”代码反思知识点图的遍历?结果菜鸡的DFS+记忆化时间和内存都不好,特别是空间!网友的BFS“剥洋葱”思路很棒!实现菜鸡的DFS+记忆化代码//数组下标从0开始//无向图//其实就是一棵树//没有重复边/*就是求每个点的单源最短路径?然后最短路径最...原创 2020-03-21 20:17:01 · 187 阅读 · 0 评论 -
LeetCode 1203. Sort Items by Groups Respecting Dependencies
文章目录知识点结果菜鸡代码网友代码代码菜鸡代码网友代码反思知识点拓扑排序结果菜鸡代码网友代码代码菜鸡代码//如果有多个答案,则返回任意一个即可?//一个组可以没有成员//一个成员可以不属于任何一组//组和成员从0开始标号//没有组的-1,不算一组!!!需要重新赋予组//后继使用set会更好?因为重复的原因?其实没啥关系class Solution {priva...原创 2020-03-21 09:51:47 · 474 阅读 · 0 评论 -
LeetCode 329. Longest Increasing Path in a Matrix
文章目录知识点结果拓扑排序动态规划代码拓扑排序动态规划反思拓扑排序动态规划知识点拓扑排序 或者 动态规划结果拓扑排序动态规划代码拓扑排序//就是返回拓扑排序的层数吧//拓扑信息是大于关系吧class Solution {public: int longestIncreasingPath(vector<vector<int>>& ...原创 2020-03-20 18:28:34 · 171 阅读 · 0 评论 -
LeetCode 210. Course Schedule II
文章目录知识点结果代码反思知识点拓扑排序结果代码//编号从0开始class Solution {public: vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) { //前驱后继数组 vector&...原创 2020-03-20 12:50:34 · 106 阅读 · 0 评论 -
LeetCode 207 Course Schedule【拓扑排序模板题】
文章目录知识点疑问代码反思知识点拓扑排序疑问暂无代码class Solution {public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { //课程数组,存储直接后继课程 vector<vector<int&g...原创 2020-03-20 12:19:05 · 115 阅读 · 0 评论