![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论-深度优先遍历
LYoGa
这个作者很懒,什么都没留下…
展开
-
UVA11387 - The 3-Regular Graph(推理)
题目链接题意:给n个点,问是否能画出一个无向图,且每个顶点连接3条边,如果可以的话输出连接的边。思路:当增加一条边时,总的无向图的度数会增加2,所以度数之和n*2为偶数。当n为奇数时,度数之和为奇数,所以不存在。当n为偶数时才符合条件。注意特判n为2时的情况。输出的话,就头尾相连,然后i与i+(n/2)相连。#include #include #include原创 2014-08-12 09:50:44 · 831 阅读 · 0 评论 -
UVA610 - Street Directions(Tarjan)
题目链接题意: 给出一张无向图,尽量多的使边成为单向边,改变之后的图仍然强连通。思路:找出所有的桥,桥肯定是不能改变成为单向边,之后不是桥的边能组成n个连通块,按照dfs的顺序规定方向即可。代码:#include #include #include #include #include #include using namespace std;原创 2014-10-13 15:37:59 · 899 阅读 · 0 评论 -
UVA10199- Tourist Guide(割点)
题目链接题意: 给出一张无向图,找出割点,字典序输出割点的名字。思路:简单的割点的求解,用map映射,容易输出。代码:#include #include #include #include #include #include #include #include using namespace std;const int MAXN = 1原创 2014-10-13 16:29:54 · 901 阅读 · 0 评论 -
POJ2117-Electricity
题目链接题意: 求出删除一个点之后,连通块最多有多少思路:数组记录每个点删除后的连通块有多少个,注意图不一定是连通的。代码:#include #include #include #include #include #include using namespace std;const int MAXN = 10005;struct Edg原创 2014-10-13 17:03:46 · 1302 阅读 · 0 评论 -
UVA10765-Doves and bombs(BCC)
题目链接题意:给定一个n个点的连通的无向图,一个点的“鸽子值”定义为将它从图中删去后连通块的个数。求“鸽子值”按降序排列的前m个。思路:其实题目就是要用来寻找割顶,我们只需找出割顶,然后记录这个割顶属于几个不同连通分量的公共点,不是割点的,去掉之后,图的连通块数为1。代码:#include #include #include #include #原创 2014-10-03 13:55:42 · 1107 阅读 · 0 评论 -
UVA796- Critical Links(无向图的桥)
题目链接题意: 给出一个无向图,按顺序输出桥思路:求出所有的桥,然后按顺序输出即可代码:#include #include #include #include #include #include using namespace std;const int MAXN = 10005;struct Edge{ int to, nex原创 2014-10-13 10:03:37 · 1522 阅读 · 0 评论 -
UVA10972 - RevolC FaeLoN(双连通分量)
题目链接题意: 给定一个无向图,问最少添加多少条边,使得这个图成为连通图思路:首先注意题目给出的无向图可能是非连通的,即存在孤立点。处理孤立点之后,其他就可以当作连通块来处理,其实跟POJ3352很像,只不过存在孤立点而已。所以找出桥,缩点,然后统计度数为0(伸出两条边)的点u和度数为1(伸出一条边)的点。最后的答案为(2 * u + v + 1) / 2。PO原创 2014-10-15 23:07:10 · 1070 阅读 · 0 评论 -
UVA11838- Come and Go
题目链接题意: 判断城市是否全部能相通思路:判断一张有向图是否强连通代码:#include #include #include #include using namespace std;const int MAXN = 2005;const int MAXM = MAXN * MAXN;struct Edge{ int to, n原创 2014-10-16 19:20:13 · 917 阅读 · 0 评论 -
UVA247- Calling Circles(有向图的强连通分量)
题目链接题意: 给定一张有向图,找出所有强连通分量,并输出。思路:有向图的强连通分量用Tarjan算法,然后用map映射,便于输出,注意输出格式。代码:#include #include #include #include #include using namespace std;const int MAXN = 2000;const in原创 2014-10-16 18:48:32 · 1565 阅读 · 0 评论 -
UVA11709- Trust groups
题目链接题意: 公司里面的人际关系,A相信B,B相信C,即A相信C,每个人都相信自己,求出存在几个小组,小组内的成员互相相信。思路:求有向图中,强连通分量的个数。思路:#include #include #include #include #include using namespace std;const int MAXN = 1010;原创 2014-10-16 20:08:00 · 935 阅读 · 0 评论 -
UVA11504- Dominos(Tarjan+缩点)
题目链接题意:多米诺骨牌的游戏,给出一些牌,以及哪张牌倒了之后会推倒哪张牌,求最少的推倒牌的张数,使得所有牌都倒下去。思路:有向图的强连通分量,用Tarjan缩点之后找出入度为0的点的个数,即为答案。代码:#include #include #include #include using namespace std;const int MAXN原创 2014-10-16 23:37:52 · 1589 阅读 · 0 评论 -
UVA11770 - Lighting Away
题目链接题意:一个有向图,每对一个结点操作,就可以触发连锁反应,使得该结点及它直接或间接指向的点均获得标记,问至少需要操作多少个结点使得所有结点获得标记思路:有向图的强连通分量,用Tarjan缩点之后找出入度为0的点的个数,即为答案。跟UVA11504一样的题目。UVA11504代码:#include #include #include #原创 2014-10-17 16:03:23 · 909 阅读 · 0 评论 -
POJ2553-The Bottom of a Graph
题目链接题意:求解Bottom(G),即集合内的点可以互相到达。思路:有向图的强连通,缩点,找出出度为0的点,注意符合的点要按升序输出。代码:#include #include #include #include using namespace std;const int MAXN = 5010;const int MAXM = 50010;原创 2014-10-18 10:01:14 · 1045 阅读 · 0 评论 -
POJ2762-Going from u to v or from v to u?(强连通缩点+DP)
题目链接题意:给出一张有向图,判断图上的任意两个点是否存在一条路可达(单向可达即可)。思路:有向图找出强连通分量,然后缩点,因为题目要求任意两点存在可达的路,所以缩点之后的点,要形成一条单链,才能符合可达的要求,在这里用DP求最长路来判断是否能形成一条单链。代码:#include #include #include #include #include原创 2014-10-18 10:31:46 · 982 阅读 · 0 评论 -
UVA315- Network(无向图割点)
题目链接题意: 给出一张无向图,求割点的个数思路:很裸的题目,直接套用模版即可。代码:#include #include #include #include using namespace std;const int MAXN = 1005;struct Edge{ int to, next; bool cut;}edge原创 2014-10-13 10:38:56 · 2373 阅读 · 0 评论 -
图的割点、桥与双连通分支
[点连通度与边连通度]在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。一个图的点连通度的定义为,最小割点集合中的顶点数。类似的,如果有一个边集合,删除这个边集合以后,原图变成多个连通块,就称这个点集为割边集合。一个图的边连通度的定义为,最小割边集合中的边数。[双连通图、割点与桥]转载 2014-10-03 20:02:06 · 655 阅读 · 0 评论 -
UVALive5135 - Mining Your Own Business(BCC)
题目链接题意:n条隧道由一些点连接而成,其中每条隧道链接两个连接点。任意两个连接点之间最多只有一条隧道。任务就是在这些连接点中,安装尽量少的太平井和逃生装置,使得不管哪个连接点倒塌,工人都能从其他太平井逃脱,求最少安装数量和方案。思路:其实本题就相当于在一张无向图中,涂尽量少的黑点,使得任意删除哪个点,每个连通分量至少有一个黑点。因为不同的连通分量最多只有一个公共点原创 2014-09-26 19:35:39 · 896 阅读 · 0 评论 -
UVALive4255-Guess(拓扑排序)
题目链接题意:对于一个序列a1,a2...an,我们可以计算出一个符号矩阵S,其中Sij为ai+..+aj的正负号。给出符号矩阵,要求输出一个对应的序列。思路:使用连续和转化为前缀和之差的技巧,将前缀和当做一个顶点,那样就能确立边的关系,以及入度数,之后用拓扑排序求解,先着一个入度为0的顶点,删除其相关的边,循环操作。代码:#include #includ原创 2014-09-26 09:03:22 · 1224 阅读 · 0 评论 -
UVALive3523-Knights of the Round Table(BCC+二分图判定)
题目链接题意:有n个骑士经常举行圆桌会议,每次至少3人参加,且相互厌恶的其实不能坐在圆桌相邻的位置。如果发生意见分歧,则要举手表决,因此参加的骑士数目一定要为奇数。统计有多少人不能参加任何一个会议。思路:这是大白上面的一道例题。我们可以先根据骑士之间的关系建立无向图G,则题目就转化为求不再任何一个简单奇圈上的结点个数。如果图G不连通,就分别对G的连通分量求解。简单圈上的原创 2014-09-26 17:06:49 · 911 阅读 · 0 评论 -
HDU5040- Instrusive(BFS+记忆化搜索)
题目链接原创 2014-09-23 20:49:25 · 729 阅读 · 0 评论 -
UVA11624-Fire!(两次bfs)
题目链接题意:你的任务是帮助J走出一个大火蔓延的迷宫。J每分钟可以超上下左右四个方向移动,而所有着火的格子都会往四周蔓延。迷宫中有一些障碍,J和火都无法进入。当J走到一个迷宫的边界格子时,我们认为他已经走出了迷宫。思路:这是大白上面的一道题目,其实只要将每个格子什么时间着火处理出来就可以了。两次BFS,第一次处理格子着火的时间,第二次BFS就是判断是否能在最短时间内走出原创 2014-09-24 22:51:47 · 1562 阅读 · 0 评论 -
UVA10047- The Monocycle(BFS)
题目链接题意:一自行车的轮子被分成5个扇区,涂了5种不同颜色。自行车每1秒要么骑到下一个格子,要么左转或者右转90。。一开始自行车面向北,颜色为绿,到达目标格时,必须触底颜色为绿,但朝向无限制。求到达目标格的最短时间。思路:判重数组多加两维,分别为朝向和颜色,之后就可以用BFS求最少时间了。代码:#include #include #include #原创 2014-09-25 10:11:17 · 1179 阅读 · 0 评论 -
UVALive4287-- Proving Equivalences(SCC+Tarjan)
题目链接题意:证明n个命题全部等价,已经给出m此推导,求至少还要几次推导才能完成整个证明。思路:可以将命题看作结点,推导看作有向边,则本题就能转化为n个结点m条边的有向图。利用tarjan算法得到所有强连通分量,将这些强连通分量当作一个点,得到一个DAG。之后就可以求次数了。注意当强连通数量为1时,就代表着证明已经完成了。代码:#include #incl原创 2014-09-28 09:46:36 · 860 阅读 · 0 评论 -
UVA11324-- The Largest Clique(SCC+DP)
题目链接题意:给出一张有向图,求一个结点数最大的结点集,使得该结点集中任意两个结点u和v满足:要么u可以到到v,要么v可以到达u(u和v可以互相到达)思路:我们可以缩点,用Tarjan求出所有强连通分量,让每个SCC的权值等于它的结点个数。由于SCC图是有一个DAG,使用DP求解。代码:#include #include #include #inclu原创 2014-09-28 11:03:01 · 1203 阅读 · 0 评论 -
HDU3861-The King’s Problem(有向图强连通缩点+最小路径覆盖)
题目链接题意:题目大意:一个有向图,让你按规则划分区域,要求划分的区域数最少。 规则如下: 1、有边u到v以及有边v到u,则u,v必须划分到同一个区域内。 2、一个区域内的两点至少要有一方能到达另一方。 3、一个点只能划分到一个区域内。思路:根据规则1可知必然要对强连通分量进行缩点,缩点后变成了一个弱连通图。根据规则2、3可知即是要求图的最小路径覆盖。原创 2014-10-21 19:33:41 · 1000 阅读 · 0 评论 -
UVA11396-Claw Decomposition(二分图判定)
题目链接题意:是否能将一张无向连通图分解成多个爪型。每一条边只能属于一个爪型,每个点的度数为3.思路:当图分解成类干个爪型时,每条边只属于一个爪子,所以每条边的两个点一定要处于2个不同的鸡爪中代码:#include #include #include #include #include using namespace std;const in原创 2014-09-29 15:56:04 · 847 阅读 · 0 评论 -
UVA11080- Place the Guards(二分图染色)
题目链接题意:放最少的士兵去监视所有的道路, 但士兵不可相邻,符合的话,就输出最少的士兵数,否则输出-1思路:其实就是二分图染色,即黑白染色,然后选择黑白染色最少的那个颜色累加,但要注意可能有多个连通块,只要有一个连通块不符合的话,就不符合。代码:#include #include #include #include #include using原创 2014-10-11 20:07:18 · 887 阅读 · 0 评论 -
POJ3352-Road Construction(边连通分量)
题目链接题意:问要添加几条边才能使所给无向图图变成边双连通图。思路:一个有桥的连通图,如何把它通过加边变成边双连通图?方法为首先求出所有的桥,然后删除这些桥边,剩下的每个连通块都是一个双连通子图。把每个双连通子图收缩为一个顶点,再把桥边加回来,最后的这个图一定是一棵树,边连通度为1。统计出树中度为1的节点的个数,即为叶节点的个数,记为leaf。则至少在树上添原创 2014-10-03 21:15:44 · 1789 阅读 · 1 评论 -
POJ1236-Network of Schools(Tarjan + 缩点)
题目链接题意:给定一张有向图,问最少选择几个点能遍历全图,以及最少添加几条边使得有向图成为一个强连通图。思路:对于有向图而言,首先求出有几个强连通分量,之后将每个强连通分量缩点,形成DAG,本题开头第一句就说图是连通的了。之后想要遍历整张图的话,只要找出入度为0的点有几个,而添加边的数量就取决于所有点的出入度大小。代码:#include #include原创 2014-10-03 15:36:51 · 852 阅读 · 0 评论 -
POJ3694-Network(Tarjan缩点+LCA)
题目链接题意:给你一个连通图,然后再给你n个询问,每个询问给一个点u,v表示加上u,v之后又多少个桥。思路:用Tarjan缩点后,形成一棵树,所以树边都是桥了。然后加入边以后,查询LCA,LCA上的桥都减掉。代码:#include #include #include #include #include #include using namesp原创 2014-10-22 11:55:06 · 951 阅读 · 0 评论