随笔分类 - 图论相关
摘要:题目来源 210. 课程表 II 题目详情 现在你总共有 numCourses 门课需要选,记为 0 到 numCourses - 1。给你一个数组 prerequisites ,其中 prerequisites[i] = [ai, bi] ,表示在选修课程 ai 前 必须 先选修 bi 。 例如,
阅读全文
摘要:题目来源 743. 网络延迟时间 题目详情 有 n 个网络节点,标记为 1 到 n。 给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。 现在,从某个节
阅读全文
摘要:最短路径2 ECNU-1818 本题需要注意的一个问题就是重边的问题,虽然这题的数据量很小,但是不能使用邻接矩阵来存储,也不能将重边记为最小边来计算。 这里求最短路径的条数有很多方法,我第一个想到的是使用dfs来遍历,但是会超时。 有一个简单的记录最短路径条数的方法是使用一个num数组 /** *
阅读全文
摘要:Public Bike Management PAT-1018 使用一个vector来存储所有最短路的前驱结点,再通过使用dfs和一个额外的vector记录每一条路径 #include<iostream> #include<cstdio> #include<algorithm> #include<c
阅读全文
摘要:Topological Order PAT-1146 #include<iostream> #include<cstring> #include<string> #include<algorithm> #include<cstdio> #include<sstream> #include<set>
阅读全文
摘要:Travelling Salesman Problem PAT-1150 #include<iostream> #include<cstring> #include<string> #include<algorithm> #include<cstdio> #include<sstream> #inc
阅读全文
摘要:Vertex Coloring PAT-1154 #include<iostream> #include<cstring> #include<string> #include<algorithm> #include<cstdio> #include<sstream> #include<set> #i
阅读全文
摘要:克隆图 LeetCode-133 使用一个map来存储已经遍历的结点,这个存起来的结点必须是新new的才符合题意 /* // Definition for a Node. class Node { public int val; public List<Node> neighbors; public
阅读全文
摘要:Wormholes "POJ 3259" 这题是最短路问题中判断是否存在负圈的模板题。 判断负圈的一个关键就是理解:如果在图中不存在从s可达的负圈,最短路径不会经过一个顶点两次。while循环最多执行v 1次。 这题还需要注意的是输入的w条边的权值是负值,因为这是虫洞边。
阅读全文
摘要:Silver Cow Party "POJ 3268" 这题也是最短路的模板题,只不过需要进行两次求解最短路,因为涉及到来回的最短路之和。 该题的求解关键是:求解B A的最短路时,可以看做A是起点,这就和求解A B的最短路很类似了,只不过需要将单向路的距离调换一下即可。 JAVA:
阅读全文
摘要:Heavy Transportation "POJ 1797" 这题是最短路题型的变形,该题不是求起点到终点的最短路,而是求路径中的最小边的最大值。 这题的求解思路是:将原来dijkstra中的松弛方程改一下,改成求最小边的最大值的松弛方程:d[j]=max(d[j],min(d[i],w[i][j
阅读全文
摘要:Til the Cows Come Home "POJ 2387" 这题是最简单的最短路求解题,主要就是使用dijkstra算法,时间复杂度是. 需要注意的是,一定要看清楚题目的输入要求,是先输入边,再输入顶点,一开始我没看清,wrong answer了一次。
阅读全文
摘要:地铁修建 "201703 4" 这题就是最短路的一种变形,不是求两点之间的最短路,而是求所有路径中的最长边的最小值。 这里还是使用d数组,但是定义不同了,这里的d[i]就是表示从起点到i的路径中最长边中的最小值。 在松弛的时候,注意是d[i] max(d[u],cost),max保证了是所有路径中的
阅读全文
摘要:Jungle Roads "HDOJ 1301" 这是最小生成树的水题,唯一要注意的就是那个n,其实输入只有n 1行。 include include include include include include include using namespace std; const int INF
阅读全文
摘要:Borg Maze "POJ 3026" 一开始看到这题是没有思路的,看了题解才知道和最小生成树有关系。 题目的意思是每次走到一个A或者S就可以分为多个部分继续进行搜索。这里就可以看出是从该点分出去的不同路径。 所以首先需要使用bfs求出每对顶点的最短路来,但是在这个过程中,我出了个bug,导致调试
阅读全文
摘要:Highways "POJ 1751" 注意这里的样例答案也是对的,只是输出顺序改变,但是这也没关系,因为题目加了特殊判断。
阅读全文
摘要:Arctic "POJ 2349" 这题是最小生成树的变形题目。题目的意思是已经有s个卫星频道,这几个卫星频道可以构成一部分的网络,而且不用费用,剩下的需要靠d的卫星接收器。题目要求的就是最小生成树中,最大的边的长度。 题目中的传入kruskal函数里面的sn表示还需要连接的顶点个数,因为剩下的可以
阅读全文
摘要:Tram "POJ 1847" 这里其实没有必要使用SPFA算法,但是为了巩固知识,还是用了。也可以使用dijikstra算法。
阅读全文
摘要:frogger "POJ 2253" 这题的代码特别像prim求解最小生成树的代码,其实两者本来也很像。 这里的d数组不再维护的起点到该点的最短距离了,而是路径中的最长距离。 include include include include include include include using
阅读全文
摘要:昂贵的婚礼 "POJ 1062" 这道题目一开始看的时候难以理解,但是仔细想,还是可以和最短路联系的,我觉得类似于硬币交换等问题。 以下需要注意几个点,第一就是因为题目规定如何和超出了等级限制的人交易,则拒绝交易。也就是说符合交易条件的人一定和第一个人(国王)之间的等级差距小于m。 这里通过枚举等级
阅读全文