图论
图论
化身孤岛的鲸o
我祈祷拥有一颗透明的心灵
展开
-
赛码网 搭积木 连通分量、欧拉通路、欧拉回路
赛码网 搭积木 连通分量、欧拉通路、欧拉回路原创 2023-04-06 22:51:26 · 185 阅读 · 0 评论 -
PIPIOJ 1384: PIPI的飞行路线 分层图dijkstra最短路径
题目:http://39.106.164.46/problem.php?id=1384思路:可以先参考大佬的博客本题就是相当于k=1的情况,然后多了免费航线的限制条件,不是任意两个机场间都可以免费。n比较大,用优先队列优化一下。AC代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#include&原创 2020-10-11 14:50:52 · 252 阅读 · 0 评论 -
PIPIOJ 1285: 判定图中是否有环 dfs判环
题目:http://39.106.164.46/problem.php?id=1285代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#include<cstring>#include<vector>#include<stack>#include<map&g原创 2020-10-11 17:26:17 · 157 阅读 · 0 评论 -
图论知识点
(1)路径(2)强连通分量(有向图)有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components...原创 2020-01-31 14:38:20 · 1679 阅读 · 0 评论 -
前向星
什么是前向星?一种数据结构,以储存边的方式来存储图。构造方法如下:读入每条边的信息,将边存放在数组中,把数组中的边按照起点顺序排序(可以使用基数排序,如下面例程),前向星就构造完了。通常用在点的数目太多,或两点之间有多条弧的时候。一般在别的数据结构不能使用的时候才考虑用前向星。除了不能直接用起点终点定位以外,前向星几乎是完美的。效率:时间复杂度O(m),m为边数,总体时间并不会逊色于邻接表...原创 2020-02-07 17:22:52 · 1879 阅读 · 0 评论 -
Tarjan模板 强连通分量
给出一个有向图,求所有的强连通分量。第一行有两个数,n表示结点个数(结点编号为1~n),m表示有m条有向边。接下来m行,每行两个数表示一条有向边。输入样例:7 91 22 33 43 55 45 21 66 77 1输出样例:由于是自己编的,就不要求格式了,输出所有强连通分量即可。第一行输出强连通分量数量,接下来几行输出所有的强连通分量。第一个强连通分量:4第...原创 2020-01-31 17:33:01 · 208 阅读 · 0 评论 -
洛谷 P1341 无序字母对 欧拉回路和欧拉路径
洛谷 P1341 无序字母对 欧拉回路和欧拉路径题解:(1)首先,我们要判断图是否连通,若不连通,直接输出“No Solution”。判断是否连通有两种方法:dfs搜索,若一次dfs遍历不完所有的点,说明不连通。并查集,合并到最后仍存在两个及以上集合,说明不连通。(2)判断是否存在欧拉路径或者欧拉回路对于一个连通图来说:存在欧拉回路(欧拉图)的条件是所有点的度数都为偶数而存在...原创 2020-01-31 13:56:23 · 195 阅读 · 0 评论 -
洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 记忆化搜索
洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 记忆化搜索题解:当奶牛回到已经去过的房间就停止,说明此时已经遍历了一个环。每次都进行dfs搜索显然是会超时的,所以我们需要记忆化搜索。所有环上的点的输出结果都是相同的,而没有搜索过的链上的点的结果可以从它的前一个已经搜索过的点中得到。具体还是看代码吧代码如下:#include&l...原创 2020-01-31 19:21:43 · 174 阅读 · 0 评论 -
洛谷 P1268 树的重量 图+贪心
洛谷 P1268 树的重量 图+贪心题解:(1)当n=2时,答案就是dis[1][2]。(2)当n=3时,如下图:树的权值为:dis(1,2) + 中间点到3的长度中间点到3的长度=( dis(1,3) + dis(2,3) − dis(1,2) ) / 2因此ans = dis(1,2) + ( dis(1,3) + dis(2,3) − dis(1,2) ) / 2(3)在加入...原创 2020-01-19 15:57:56 · 200 阅读 · 0 评论 -
洛谷 P1330 封锁阳光大学 dfs染色
洛谷 P1330 封锁阳光大学 dfs染色题解:首先,这可能不是一个连通图,所以我们需要dfs每一个结点。我们把每一个连通子图进行黑白染色,取黑色结点和白色结点两者中的较小值,就是这个连通子图需要的最少的河蟹数量。最后把每一个连通子图需要的河蟹数量加起来即可。注意:这道题无需进行回溯,只有在那些需要求出所有可能路径的题目中才需要回溯操作。为什么呢?其实回溯操作类似于一个“遗忘操作”,使得...原创 2020-01-30 14:27:06 · 150 阅读 · 0 评论 -
洛谷 P2341 【模板】强连通分量 / [HAOI2006]受欢迎的牛
洛谷 P2341 【模板】强连通分量 / [HAOI2006]受欢迎的牛题解:(1)首先,这道题涉及强连通分量,那么我们可以使用Tarjan算法来求出所有的强连通分量。(2)求出所有的强连通分量之后,题目要求我们求出有多少只奶牛可以被其他所有的奶牛所喜欢,那么处于一个强连通分量c1中的所有奶牛它们肯定是互相喜欢的,假设c1的出度为0,说明c1只能作为一个终结点,因为c1是不能再传递爱慕的,所...原创 2020-01-31 18:13:03 · 200 阅读 · 0 评论 -
洛谷 P2661 信息传递 dfs找图的最小环
洛谷 P2661 信息传递 dfs找图的最小环题解:很明显,我们需要找到图中最小环的结点数。找任意一个点进入,记录到达每一个点所走过的遍数。当走到一个在这次查找中已经出现过的节点,即找到了一个环,用当前走到的深度减去在此节点原先记录的深度,便得到这个环的长度。由此搜遍所有点,找到这些环中最小长度的一个,并把它输出就可以了。而如果就这样去做,会有3个点TLE,所以得再加一点优化。图中所有点的...原创 2020-01-23 15:27:57 · 401 阅读 · 0 评论 -
PAT甲级 1076 Forwards on Weibo BFS广度优先搜索
Solution:题目要求:有n个用户,编号为1~n,他们都有微博,且给出他们每个人关注的用户的列表,最大层数为l。一个用户发布微博时,他们的粉丝都会转发这条微博,求在l层的限制下,这条微博的最大转发量是多少。用bfs搜索关注该用户的人。代码如下://bfs广度优先搜索#include<iostream>#include<vector>#includ...原创 2019-09-01 17:34:44 · 198 阅读 · 0 评论 -
PAT甲级 1013 Battle over cities DFS或者并查集找连通分量
Solution:这个题的大意是:在一个有n个结点(结点序号为1~n)的图中,有m条边。这时,我们去掉任意一个结点,我们要在剩下的图中形成一个连通图,最少需要多少条边。这道题可以转化为在去掉一个结点后,图的连通分量的个数,连通分量的个数cnt再减1就是最少需要增加的边的数量。先把要去掉的结点从图中移除,即visit[v]=1,再进行dfs,每次dfs后cnt+1。最后cnt-1就是结果。...原创 2019-04-20 11:55:36 · 274 阅读 · 0 评论 -
PAT甲级1021 Deepest Root dfs求连通分量+找出树的最大高度结点
思路:这道题给出一个无向图,该图有n个结点和n-1条边,若图是连通图,则它一定是一棵树,那么我们就要求出树的每个结点的高度,找出高度最大的所有结点,把结点序号依次输出;若图不是连通图,我们就要求出其连通分量的个数cnt并输出。我们先用一次dfs找到从任意一个结点开始搜索到的最大高度的结点(可能不唯一,不过对结果没有影响),把这些结点放入集合set中,并从这个结点开始再进行一次dfs,再把高度...原创 2019-05-08 00:44:20 · 294 阅读 · 0 评论 -
PAT甲级 1034 Head of a Gang DFS找连通分量
Solution:题目要求:根据每个人之间的通话时长来确定一个帮派的头目和成员个数。输入:给出N个电话记录(N<=1000)以及最小帮派通话时长K(K<=1000),每个通话记录有打电话者姓名name1、接电话者姓名name2以及通话时长Time(分钟)。姓名用3个大写字母表示。两个人之间打电话就认为他们之间有关联。当关联人数超过2人以及通话时长超过给定的K,就认为这是一个...原创 2019-08-31 13:56:09 · 197 阅读 · 0 评论 -
PAT甲级 1150 Travelling Salesman Problem (25分) 旅行商问题
PAT甲级 1150 Travelling Salesman Problem (25分) 旅行商问题题解:其实就是一个找环的题目。代码如下:#include<iostream>#include<algorithm>#include<stdio.h>#include<cmath>#include<queue>#incl...原创 2020-03-07 23:09:33 · 265 阅读 · 0 评论 -
PAT甲级 1139 First Contact 图、邻接表、map
代码如下://图,邻接表,map#include<iostream>#include<vector>#include<map>#include<algorithm>#include<string>#include<cstdlib>#include<stdio.h>#include<ma...原创 2019-11-16 00:12:14 · 232 阅读 · 0 评论 -
PAT甲级 1134 Vertex Cover 图的点覆盖问题
代码如下://图的点覆盖问题#include<iostream>#include<vector>using namespace std;struct edge{ int a; int b;};vector<edge> e;int main(){ int n,m; cin>>n>>m...原创 2019-11-16 00:06:10 · 203 阅读 · 0 评论 -
PAT甲级 1131 Subway Map 图的dfs
代码如下://图的dfs#include<iostream>#include<stdio.h>#include<vector>#include<cstring>#include<map>#define INF 0x3f3f3f3fusing namespace std;map<int,int> l...原创 2019-11-16 00:02:39 · 195 阅读 · 0 评论 -
PAT甲级 1126 Eulerian Path 欧拉图、半欧拉图
代码如下://欧拉图、半欧拉图、dfs#include<iostream>#include<vector>#define INF 0x3f3f3f3fusing namespace std;int n,m;struct edge{ int a; int b;};struct node{ vector<int>...原创 2019-11-15 23:52:28 · 190 阅读 · 0 评论 -
PAT甲级 1122 Hamiltonian Cycle 汉密尔顿回路
代码如下://汉密尔顿回路#include<iostream>#include<stdio.h>#define MAX 205using namespace std;int n,m,k,num;int mp[MAX][MAX];int a[MAX];int main(){ cin>>n>>m; for(int...原创 2019-10-25 12:34:45 · 290 阅读 · 0 评论 -
PAT甲级 1154 Vertex Coloring 顶点着色
Solution://顶点着色#include<iostream>#include<vector>#include<map>using namespace std;struct node{ int color; vector<int> edge;};int n,m;vector<node> vec...原创 2019-09-07 23:42:40 · 207 阅读 · 0 评论