
图论
Happig丶
我的孤独,虽败犹荣
展开
-
2018 天梯赛 L3-1 直捣黄龙(Floyd+打印路径+打印解的个数)
题目大意给出无向带权图,确定起点和终点,特殊地每个点都有点权。现在需要求出一条起点到终点的最短路并打印路径,该路径满足:起点到终点的距离最短;若最短路不唯一选择经过节点最多的路径;若路径仍然不唯一选择点权和最大的路径。此外还需要求出最短路的数量(这里指广义的最短路,只考虑距离)。解题思路这种多种条件限制的“最短路”之前见过几次,写法就是当前一个条件为相等时,那么考虑后一个条件。对于经过节点数,设置数组cnt[i][j]cnt[i][j]cnt[i][j]表示i→ji \rightarrow j原创 2020-11-22 17:11:19 · 396 阅读 · 0 评论 -
二分图最大匹配及匈牙利、HK算法
二分图最大匹配在二分图中,最大匹配是指选出尽可能多的边使得任意两边没有公共端点。增广路设MMM为二分图GGG已匹配的边的集合,若PPP是图GGG中一条连接两个未匹配顶点的路径(起点终点分别在两个集合),属于MMM的边和不属于MMM的边交替出现,则PPP称为MMM的一条增广路(直接匹配的边也是特殊的增广路)。如下图所示,当111和AAA已经匹配,而尝试寻找222的匹配时,发现它只能匹配AAA:然后尝试让222匹配AAA,这时再给111找新的匹配的过程看做:从222出发,遍历到AAA;再从AAA遍历原创 2020-11-20 20:35:03 · 1773 阅读 · 0 评论 -
二分图概念及相关
二分图无向图GGG的顶点集VVV可分割成两个互不相交的子集X,YX,YX,Y,并且图中的每条边连接的两个顶点一个在XXX中一个在YYY中,则称GGG为二分图。图GGG的每个环的节点个数都为偶数时才为二分图;特殊地,节点数为000的图也可以称为二分图。二分图的判断判断一个图是否为二分图,采用“““染色法”””:任选一个节点开始做DFS/BFSDFS/BFSDFS/BFS初始染一个颜色,当遍历节点uuu的子节点vvv时,若vvv未染色,则和uuu染成相反的颜色;若已染色,判断颜色和vvv是否相同,不原创 2020-11-17 12:15:58 · 557 阅读 · 0 评论 -
LightOJ - 1356 Prime Independence(二分图最大独立集+质因数分解)
传送门题目大意给出一个序列,选出一个最大的集合,使得这个集合中的任意两个数,都不存在素数倍关系。一对数x,yx,yx,y有素数倍关系,即x=p∗y(y=p∗x)x=p*y(y=p*x)x=p∗y(y=p∗x)。解题思路两个数有素数倍关系,那么这个质数ppp有很多取值的可能,而且即使找到给出序列中所有的关系,正常思路也无从下手…使用二分图去求解这样的给定限制的集合,这个思路真的很神奇。为什么能构成二分图——从质因数的奇偶性下手!不难知道一个数如果乘上一个素数后,那么它的质因数个数的奇偶性一定发生变原创 2020-11-16 10:47:57 · 227 阅读 · 0 评论 -
Arab Collegiate Programming Contest 2015 - K Road Network(树的直径)
题目链接After a fierce battle with his opponent, Bruce Wayne finally won the elections and became the mayorof Gotham. Like every other politician, he had an agenda with lots of projects for the sake of G...原创 2020-03-19 22:25:57 · 296 阅读 · 0 评论 -
HDU - 6228 Tree(思维/树的点化边)
传送门题目大意给出一棵树,现在需要给树涂上kkk种颜色,然后两种颜色之间的边作为这个颜色的边集,问kkk种颜色的边集的交集最大是多少解题思路如果去纠结如何涂点才能找到最多的边,这样很难想。实际上这种树的边和点都有的问题,不妨由点考虑边,或者由边考虑点。对于一条边,若其能作为最后的交集,那么它两侧的节点个数一定均大于等于kkk,不妨举几个例子手玩一下。那么问题就变成了只要考虑每条边。一开始我以为要遍历所有的边的两侧,这样的复杂度是O(n2)O(n^2)O(n2),但是实际上有个很巧妙的方法,我们随原创 2020-10-06 21:24:05 · 180 阅读 · 0 评论 -
EOJ Monthly 2020.9 B. 健康监测计划(贪心+思维)
传送门题目大意给出一棵树,现在在一些节点上安插健康监测站,使得每条简单路径上的检测站的数目不超过kkk个,给定kkk求出最多能安排多少监测站解题思路这题比赛时队友看成在边上建立监测站了,我也没有再次读题,好难受。实际上观察如下的图:当k=4k=4k=4时,我们发现如果安插到1,2,5,6,7,81,2,5,6,7,81,2,5,6,7,8,这样得到的才是最多的,实际上我们每次安插监测站时尽量安排到叶子节点,而不是安排到中间,因为中间的节点是很多交叉节点的LCALCALCA,那么安排到叶子节点后原创 2020-09-30 07:49:36 · 144 阅读 · 0 评论 -
HDU - 6805 Deliver the Cake(拆点+最短路)
传送门这道题放了十几天了终于给补了,原来一直卡在数据范围,因为最多拆成2e52e52e5个点,那么最多8e58e58e5条边,因为用的前向星,那么需要再多两倍的空间,因此数组要开到2e62e62e6!杭电那边一直给我报TLETLETLE,但是明明是WAWAWA或者RERERE的,真的烦因为有MMM点的影响,那么我们可以考虑将每个MMM点拆成一个LLL点和一个RRR点,这样就在建图时麻烦一点,需要写777种情况特判,然后为了方便我们设置一个超级起点和超级终点,分别为0,2∗n−10,2*n-10,2∗原创 2020-08-12 15:11:33 · 201 阅读 · 0 评论 -
最小生成树Boruvka算法
Boruvka复杂度O(ElogV)O(ElogV)O(ElogV)原理根据并查集的思想,一开始所有点看做独立子集,每次遍历边找到两个集合之间连接的最短边,不断扩大集合直到所有点合并为一个集合。由于每次循环迭代时,每棵树都会合并成一棵较大的子树,因此每次循环迭代都会使子树的数量至少减少一半,因此时间复杂度非常稳定图示步骤使用数组bestbestbest记录每个集合的最短邻边的点,如果有多个权值相同的邻边,那么取下标较小的循环主体:遍历所有的边,也就是对所有的连通块找不在集合中的,到达原创 2020-07-29 18:36:42 · 3774 阅读 · 2 评论 -
无题(Floyd的理解)
题目描述给出一个NNN个节点,MMM条边的无向带权图。在保证任意两条边最短路不变的条件下,移除多余的边,求需要移除的边的数目输入第一行包含两个正整数n(2≤n≤300),m(1≤m≤50000)n(2 \leq n \leq 300),m(1 \leq m \leq 50000)n(2≤n≤300),m(1≤m≤50000)接下来m行,每行三个正整数ui,vi(1≤ui,vi≤n),wi(1≤wi≤300)u_i,v_i(1 \leq u_i,v_i \leq n),w_i(1 \leq w_i \原创 2020-07-11 10:13:46 · 166 阅读 · 0 评论 -
牛客算法周练——小H和游戏(树上dfs+数组优化)
题目链接1.题目大意:给出一棵树,现在如果对一个节点轰炸一次,那么和它距离不超过2的节点也会被波及。现在有q(q<=7e5)次轰炸,问每次被轰炸的后此次轰炸的节点目前为止被轰炸多少次2.很明显想到暴力dfs,但是如果只有树的深度只有2层而且所有子节点均连接在根节点,轰炸Q次根节点,时间复杂度达到了O(n2)。必须想其他方法,不难发现对于树上的某个点,我们只需要考虑它的儿子,孙子,父亲...原创 2020-04-16 12:56:25 · 263 阅读 · 0 评论 -
HDU1811 Rank of Tetris(并查集+拓扑排序)
题目链接自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球。为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球Tetris高手排行榜,定时更新,名堂要比福布斯富豪榜还响。关于如何排名,这个不用说都知道是根据Rating从高到低来排,如果两个人具有相同的Rating,那就按这几个人的RP从高到低来排。终于,Lele要开始行动了...原创 2020-03-06 22:33:32 · 179 阅读 · 0 评论 -
POJ1270 Following Orders(字符串处理+拓扑序全排列)
题目链接Order is an important concept in mathematics and in computer science. For example, Zorn’s Lemma states: ``a partially ordered set in which every chain has an upper bound contains a maximal elemen...原创 2020-03-06 20:50:14 · 174 阅读 · 0 评论 -
最小生成树——Prim详解
Prim求MST复杂度:朴素Prim算法的时间复杂度为O(V2); 堆优化的时间复杂度为O(VlogE),V为点数,E为边数原理:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任意一点的权值最小,此时将c点...原创 2020-03-03 16:43:25 · 1639 阅读 · 1 评论 -
最短路径四种算法——总结篇
最短路在一个图中有 n个点、m条边。边有权值,权值可正可负。边可能是有向的,也可能是无向的。给定两个点,起点是s,终点是t,在所有能连接s和t的路径中寻找边的权值之“和” 最小的路径,这就是最短路径问题最短路有两种:单源最短路:从单个节点出发,到所有节点的最短路多源最短路:整个图中所有点到其他点的最短路无权图BFS求最短路有权图算法\对比主要适用方向时间复杂度处...原创 2020-03-02 18:10:02 · 4144 阅读 · 1 评论 -
BFS求无权无向图最短路
BFS求最短路假设有一个n行m列网格迷宫,每个宫格要么可以走要么不可以走,设置一个起点和一个终点,如何求起点到终点的最短路径?(图片来自网上)我们知道BFS广度优先搜索就是按照距离根节点距离从小到大的顺序搜索,因此利用BFS逐步计算出每个节点到起点的最短距离,以及最短路径每个节点的前一个节点,最终将生成一颗以起点为根的BFS树。此时BFS可以求出任意一点到起点的最短距离下面代码假设起点在(...原创 2020-03-02 18:07:19 · 1149 阅读 · 0 评论 -
ICPC North Central NA Contest 2017 - Is-A? Has-A? Who Knowz-A? (Floyd求传递闭包)
题目链接Two familiar concepts in object oriented programming are the is-a and has-a relationships. Given two classes A and B, we say that A is-a B if A is a subclass of B; we say A has-a B if one of the ...原创 2020-02-29 22:39:16 · 296 阅读 · 0 评论 -
哈密顿回路 竞赛图 构造哈密顿回路(待更新)
哈密顿回路1.哈密顿回路图G的一个回路,该回路除了经过初始结点两次以外,恰好经过每个结点一次,则称此回路为哈密顿回路。哈密顿回路中每个结点都为偶结点且入度和出度均为12.哈密顿路径一条路径上每个节点仅经过一次的路径称为哈密顿路径3.哈密顿通路含有图G所有节点的哈密顿路径称为哈密顿通路4.哈密顿图含有哈密顿回路的图竞赛图简介图G是一个有向图,其中每对不同的顶点通过单个有向边连接...原创 2020-02-28 20:05:43 · 2133 阅读 · 0 评论 -
UCF Local Programming Contest 2015 I - Longest Path(竞赛图+哈密顿路径)
You are visiting a lovely garden, with several points of interest. Every pair of points of interest have a single, one way path (edge) connecting them. (The paths are one way so that guests don’t ge...原创 2020-02-28 20:02:05 · 544 阅读 · 0 评论 -
POJ1511 Invitation Cards (最短路+正反向建图)
In the age of television, not many people attend theater performances. Antique Comedians of Malidinesia are aware of this fact. They want to propagate theater and, most of all, Antique Comedies. They ...原创 2020-02-23 17:28:21 · 251 阅读 · 0 评论 -
欧拉回路
欧拉通路定义从图G一个节点出发走完全部的边,且这条路上的每个边恰好只经过一次。这样的路称为欧拉通路判断是否存在欧拉通路无向图如果一个图G是连通图,G中仅有两个节点的度数是奇数,其他节点的度数均是偶数,那么图G存在欧拉通路有向图G为有向图,G中仅有两个节点特殊节点,一个节点入度比出度大1(通路的终点),另外一个节点是出度比入度大1(通路的起点),其余节点入度等于出度,那么图G中存在欧...原创 2020-02-17 21:30:28 · 369 阅读 · 0 评论 -
Floyd算法及常见应用总结
Floyd时间复杂度O(n3),空间复杂度O(V2),应用于求多源最短路(可以含有负权但不能含有负环)首先我们用邻接矩阵表示图,如果Vi和Vj有点可到达,那么更新G[i][j],否则G[i][j]为无穷大(一般设为0x3f3f3f3f,这样两个无穷大相加也不会溢出)算法思想:实际上是动态规划的思想,对于任何两个节点i和j而言,i到j的最短距离不外乎存在i与j之间经过k和不经过k两种情况,所以...原创 2020-02-10 22:23:18 · 1921 阅读 · 0 评论 -
最短路之Bellman-Ford & SPFA
Bellman-Ford时间复杂度O(V*E),用于求带权图单源最短路(可含负权,可判断是否有回路)Bellman-Ford和Dijkstra类似,都是以边的松弛操作为基础,回顾一下松弛操作:对于边(k,j),d[j] = min(d[j],d[k]+w(k,j)),即如果加上这条边那么更新起点到j的最短路为二者中最小的那个。但是Dijkstra属于贪心算法,每次都找剩余不确定的点中的最短路,...原创 2020-02-09 14:09:51 · 938 阅读 · 0 评论 -
最短路之Dijkstra
简介Dijkstra算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(BFS思想),直到扩展到终点为止Dijkstra不能处理带负权和带有回路的图算法思想设起点为u,引入两个集合S、U,S集合包含已求出的最短路径的点,U集合记录未求出最短路径的点以及到起点的距离初始化两个集合,S集合初始时只有起点,U集合初始时为起点到其他节点...原创 2020-02-08 16:20:56 · 1640 阅读 · 0 评论 -
HDU4857 逃生(拓扑排序经典好题)
题目链接题目大意:n个人排成一队,除了必要的约束条件:输入a b代表a必须排在b的前面。满足m个约束条件后,还有一个对所有点来说的关系就是1号最富,2号第二富,以此类推。所以要让1号尽量靠前,如果此时还有多种情况,就再让2号尽量靠前,如果还有多种情况,就让3号尽量靠前,以此类推。输出该序列明显是拓扑排序的裸题,如果用最小堆的优先队列,跑一遍拓扑排序便过了样例。刚开始没注意m很大,使用了cin...原创 2020-02-07 15:42:44 · 483 阅读 · 0 评论 -
拓扑排序及两种实现(BFS,DFS)
定义对一个有向无环图 (Directed Acyclic Graph 简称 DAG) G 进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点 u 和 v,若边<u,v>∈ E(G),则 u 在线性序列中出现在 v 之前。通常,这样的线性序列称为满足拓扑次序 (Topological Order) 的序列,简称拓扑序列由某个集合上的一个偏序得到该集合上的一个全序,这...原创 2020-02-06 16:53:26 · 4065 阅读 · 0 评论 -
图论基础
图的定义图G是一个有序二元组(V,E),其中V称为顶点集(Vertices Set),E称为边集(Edges set),E与V不相交。它们也可写成V(G)和E(G)。E的元素都是二元组,代表一条边的两个端点,用(x,y)表示,其中x,y∈V图G是一个三元组(V,E,I),其中V称为顶集,E称为边集,I称为关联函数。I将E中的每一个元素映射到 V×V。如果e被映射到(u,v),那么称边e...原创 2020-02-05 22:06:02 · 781 阅读 · 0 评论 -
图的存储——链式前向星
前向星前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了以下图为例构造前向星:len[i]记录所有以i为起点的边在数组中的存储长度head[i]记录以i为起点的边集在数组中的第一个存储位置利用前向星,我们可以O(len[i])的时间找到以i为起...原创 2020-02-05 20:42:32 · 461 阅读 · 0 评论 -
最小生成树——Kruskal详解
最小生成树一个有 n 个结点的连通图的生成树是原图的最小连通子图,包含原图中的所有 n 个结点(意味着有n-1条边),能保持图连通并且权值和最小的边Kruskal 求MST复杂度:O(E*logE),E为边数。适合于求边较少图的最小生成树原理:首先将所有的边按从小到大顺序排序,并认为每一个点都是孤立的,分属于n个独立的集合。然后按顺序枚举每一条边,如果这个边不会与之前选择的所有边组成回...原创 2020-01-19 22:57:32 · 783 阅读 · 0 评论