
AcWing算法基础
基础模板学习,重在记忆,直接套用!
AARM
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ACWing算法思考:图论算法(模板)选用!
最短路问题稠密图:Dijkstra算法稀疏图或者负权:Spfa算法有步数限制:Bella-Ford算法原创 2020-08-27 15:17:47 · 312 阅读 · 0 评论 -
AcWing算法思考:整数(浮点数)二分查找模板分析!
红色的是不一样的地方,其他情况是一样的数组存在指定值时:得到从左到右第一个满足指定值的下标。数组不存在指定值时:得到从左到右第一个大于指定值的下标。不存在大于指定值的时候(即都比指定值小),得到数组结尾下标。不存在小于指定值的时候(即都比指定值大),得到数组开始下标。代码模板: static int BinerySearch(int[] nums, int l, int r, int k){ if(l > r)return;原创 2020-08-25 17:34:35 · 319 阅读 · 0 评论 -
AcWing 4. 多重背包问题(DP)
有NN种物品和一个容量是VV的背包。第ii种物品最多有sisi件,每件体积是vivi,价值是wiwi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,VN,V,用空格隔开,分别表示物品种数和背包容积。接下来有NN行,每行三个整数vi,wi,sivi,wi,si,用空格隔开,分别表示第ii种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤1...原创 2020-08-24 17:56:15 · 204 阅读 · 0 评论 -
AcWing 837. 连通块中点的数量(并查集)
给定一个包含n个点(编号为1~n)的无向图,初始时图中没有边。现在要进行m个操作,操作共有三种:“C a b”,在点a和点b之间连一条边,a和b可能相等; “Q1 a b”,询问点a和点b是否在同一个连通块中,a和b可能相等; “Q2 a”,询问点a所在连通块中点的数量;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“C a b”,“Q1 a b”或“Q2 a”中的一种。输出格式对于每个询问指令”Q1 a b”,如果a和b在同一个连通块中,则输出“Yes原创 2020-08-24 17:48:47 · 253 阅读 · 0 评论 -
AcWing 801. 二进制中1的个数(位运算)
给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。输入格式第一行包含整数n。第二行包含n个整数,表示整个数列。输出格式共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。数据范围1≤n≤1000001≤n≤100000,0≤数列中元素的值≤1090≤数列中元素的值≤109输入样例:51 2 3 4 5输出样例:1 1 2 1 2import java.io.*;import java.lang原创 2020-08-24 17:46:45 · 502 阅读 · 1 评论 -
AcWing 800. 数组元素的目标和(双指针算法)
给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。请你求出满足A[i] + B[j] = x的数对(i, j)。数据保证有唯一解。输入格式第一行包含三个整数n,m,x,分别表示A的长度,B的长度以及目标值x。第二行包含n个整数,表示数组A。第三行包含m个整数,表示数组B。输出格式共一行,包含两个整数 i 和 j。数据范围数组长度不超过100000。同一数组内元素各不相同。1≤数组元素≤1091≤数组元素≤109输入样例:4 5 61原创 2020-08-24 17:45:59 · 261 阅读 · 0 评论 -
AcWing 799. 最长连续不重复子序列(双指针算法)
给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。输入格式第一行包含整数n。第二行包含n个整数(均在0~100000范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。数据范围1≤n≤1000001≤n≤100000输入样例:51 2 2 3 5输出样例:3import java.io.*;import java.lang.*;import java.util.*;cl原创 2020-08-24 17:44:03 · 378 阅读 · 0 评论 -
AcWing 125. 耍杂技的牛(贪心)
农民约翰的N头奶牛(编号为1..N)计划逃跑并加入马戏团,为此它们决定练习表演杂技。奶牛们不是非常有创意,只提出了一个杂技表演:叠罗汉,表演时,奶牛们站在彼此的身上,形成一个高高的垂直堆叠。奶牛们正在试图找到自己在这个堆叠中应该所处的位置顺序。这N头奶牛中的每一头都有着自己的重量WiWi以及自己的强壮程度SiSi。一头牛支撑不住的可能性取决于它头上所有牛的总重量(不包括它自己)减去它的身体强壮程度的值,现在称该数值为风险值,风险值越大,这只牛撑不住的可能性越高。您的任务是确定奶牛的排原创 2020-08-24 16:46:05 · 257 阅读 · 0 评论 -
AcWing 104. 货仓选址(贪心+前后缀和)
在一条数轴上有N家商店,它们的坐标分别为A1~AN。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。输入格式第一行输入整数N。第二行N个整数A1~AN。输出格式输出一个整数,表示距离之和的最小值。数据范围1≤N≤100000输入样例:46 2 9 1输出样例:12算法思想维护前缀和和后缀和,然后减去左边选中数字乘上左边个数减去左前缀和,右边前...原创 2020-08-24 11:14:27 · 344 阅读 · 0 评论 -
AcWing 913. 排队打水(贪心)
有n个人排队到 1 个水龙头处打水,第i个人装满水桶所需的时间是ti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?输入格式第一行包含整数n。第二行包含nn个整数,其中第ii个整数表示第ii个人装满水桶所花费的时间titi。输出格式输出一个整数,表示最小的等待时间之和。数据范围1≤n≤10^5,1≤ti≤10^4输入样例:73 6 1 4 2 5 7输出样例:56算法思想:从小到大排序 然后将打水的时间乘上等...原创 2020-08-24 10:23:01 · 475 阅读 · 0 评论 -
AcWing 148. 合并果子(贪心:哈夫曼树)
在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。达达决定把所有的果子合成一堆。每一次合并,达达可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以达达在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使达达耗费的体力最少原创 2020-08-23 17:24:51 · 405 阅读 · 0 评论 -
AcWing 907. 区间覆盖(区间贪心)
给定N个闭区间[ai,biai,bi]以及一个线段区间[s,ts,t],请你选择尽量少的区间,将指定线段区间完全覆盖。输出最少区间数,如果无法完全覆盖则输出-1。输入格式第一行包含两个整数s和t,表示给定线段区间的两个端点。第二行包含整数N,表示给定区间数。接下来N行,每行包含两个整数ai,biai,bi,表示一个区间的两个端点。输出格式输出一个整数,表示所需最少区间数。如果无解,则输出-1。数据范围1≤N≤1051≤N≤105,−109≤ai≤bi≤109−109原创 2020-08-23 17:13:51 · 422 阅读 · 0 评论 -
AcWing 906. 区间分组
给定N个闭区间[ai,bi],请你将这些区间分成若干组,使得每组内部的区间两两之间(包括端点)没有交集,并使得组数尽可能小。输出最小组数。输入格式第一行包含整数N,表示区间数。接下来N行,每行包含两个整数ai,bi,表示一个区间的两个端点。输出格式输出一个整数,表示最小组数。数据范围1≤N≤10^5,−109≤ai≤bi≤10^9输入样例:3-1 12 43 5输出样例:2算法思想:维护每组的最大右端点,新来的右端点与每组比大小,打了更新原创 2020-08-23 11:45:53 · 244 阅读 · 0 评论 -
AcWing 908. 最大不相交区间数量(贪心:同区间选点)
给定N个闭区间[ai,bi],请你在数轴上选择若干区间,使得选中的区间之间互不相交(包括端点)。输出可选取区间的最大数量。输入格式第一行包含整数N,表示区间数。接下来N行,每行包含两个整数ai,biai,bi,表示一个区间的两个端点。输出格式输出一个整数,表示可选取区间的最大数量。数据范围1≤N≤10^5,−10^9≤ai≤bi≤10^9输入样例:3-1 12 43 5输出样例:2import java.io.*;import java.l原创 2020-08-23 10:05:19 · 351 阅读 · 0 评论 -
AcWing 905. 区间选点(贪心:区合合并的变形)
给定N个闭区间[ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作区间内。输入格式第一行包含整数N,表示区间数。接下来N行,每行包含两个整数ai,bi,表示一个区间的两个端点。输出格式输出一个整数,表示所需的点的最小数量。数据范围1≤N≤10^5,−10^9≤ai≤bi≤10^9输入样例:3-1 12 43 5输出样例:2//类似于区间合并问题,不过区间合并是最原创 2020-08-23 09:45:53 · 334 阅读 · 0 评论 -
AcWing 901. 滑雪 (搜索优化为dp)
给定一个R行C列的矩阵,表示一个矩形网格滑雪场。矩阵中第 i 行第 j 列的点表示滑雪场的第 i 行第 j 列区域的高度。一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。下面给出一个矩阵作为例子: 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9在给定矩阵中,一条可行的滑行原创 2020-08-22 21:08:56 · 214 阅读 · 0 评论 -
AcWing 285. 没有上司的舞会(树形DP)
此题类似于打家劫舍的树形问题:打家劫舍 IIIUral大学有N名职员,编号为1~N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数HiHi给出,其中1≤i≤N1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。输入格式第一行一个整数N。接下来N行,第 i 行表示 i 号职员的快乐指数HiHi。接...原创 2020-08-22 18:04:08 · 210 阅读 · 0 评论 -
AcWing 91. 最短Hamilton路径(状态压缩DP)
给定一张nn个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数nn。接下来nn行每行nn个整数,其中第ii行第jj个整数表示点ii到jj的距离(记为a[i,j])。对于任意的x,y,zx,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]>=a[x,z]。输出格式输出一个整数...原创 2020-08-22 15:44:41 · 336 阅读 · 0 评论 -
AcWing 240. 食物链(并查集)
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。有人用两种说法对这N个动物所构成的食物链关系进行描述:第一种说法是”1 X Y”,表示X和Y是同类。第二种说法是”2 X Y”,表示X吃Y。此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。1)原创 2020-08-22 12:02:46 · 181 阅读 · 0 评论 -
AcWing 282. 石子合并(区间DP)
设有N堆石子排成一排,其编号为1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价为9,得到9 2 ,再合并得到11,总代价为4+9+11=24;如果第二步是先合并2,3堆,则代价为7...原创 2020-08-21 19:34:27 · 273 阅读 · 0 评论 -
AcWing 899. 编辑距离(线性DP)
注:AcWing 902 最短编辑距离的基础 基础上加一个循环给定n个长度不超过10的字符串以及m次询问,每次询问给出一个字符串和一个操作次数上限。对于每次询问,请你求出给定的n个字符串中有多少个字符串可以在上限操作次数内经过操作变成询问给出的字符串。每个对字符串进行的单个字符的插入、删除或替换算作一次操作。输入格式第一行包含两个整数n和m。接下来n行,每行包含一个字符串,表示给定的字符串。再接下来m行,每行包含一个字符串和一个整数,表示一次询问。字符串中只包含小写字母,..原创 2020-08-20 16:42:46 · 267 阅读 · 0 评论 -
AcWing 902. 最短编辑距离(线性DP)
给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有:删除–将字符串A中的某个字符删除。 插入–在字符串A的某个位置插入某个字符。 替换–将字符串A中的某个字符替换为另一个字符。现在请你求出,将A变为B至少需要进行多少次操作。输入格式第一行包含整数n,表示字符串A的长度。第二行包含一个长度为n的字符串A。第三行包含整数m,表示字符串B的长度。第四行包含一个长度为m的字符串B。字符串中均只包含大写字母。输出格式输出一个整数,表示最少操作次数。数据范围原创 2020-08-20 16:40:31 · 389 阅读 · 0 评论 -
AcWing 897. 最长公共子序列(线性DP)
给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。输入格式第一行包含两个整数N和M。第二行包含一个长度为N的字符串,表示字符串A。第三行包含一个长度为M的字符串,表示字符串B。字符串均由小写字母构成。输出格式输出一个整数,表示最大长度。数据范围1≤N,M≤10001≤N,M≤1000输入样例:4 5acbdabedc输出样例:3import java.io.*;import java.la原创 2020-08-16 21:01:21 · 379 阅读 · 0 评论 -
AcWing 896. 最长上升子序列 II(动态规划的优化之贪心:步步更新法)
给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000001≤N≤100000,−109≤数列中的数≤109−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4思想:难点:假如我们得到了一个子序列,但是突然出现一个小于栈顶的数值,我们不确定这个数值加上之后的序列会不会超过我们已经得到...原创 2020-08-16 16:04:17 · 270 阅读 · 0 评论 -
AcWing 895. 最长上升子序列(线性DP)
给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤10001≤N≤1000,−109≤数列中的数≤109−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4思想:时间复杂度:O(n^2)import java.io.*;import java.lang.*;class Main原创 2020-08-16 10:35:41 · 273 阅读 · 0 评论 -
AcWing 898. 数字三角形(线性DP)
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 44 5 2 6 5输入格式第一行包含整数n,表示数字三角形的层数。接下来n行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。输出格式输出一个整数,表示最大的路径数字和。数...原创 2020-08-16 09:54:47 · 204 阅读 · 0 评论 -
AcWing 9. 分组背包问题(动态规划dp)
有N组物品和一个容量是V的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是vij,价值是wij,其中ii是组号,j是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数N,V,V,用空格隔开,分别表示物品组数和背包容量。接下来有N 组数据:每组数据第一行有一个整数Si,表示第ii个物品组的物品数量; 每组数据接下来有Si行,每行有两个整数vij,wij,用空...原创 2020-08-15 16:06:28 · 369 阅读 · 0 评论 -
AcWing 5. 多重背包问题 II(二进制优化的多重背包问题dp)
有N种物品和一个容量是V的背包。第ii种物品最多有si件,每件体积是vi,价值是wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,V,用空格隔开,分别表示物品种数和背包容积。接下来有N行,每行三个整数vi,wi,,si,用空格隔开,分别表示第ii种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N≤10000<N≤10000&...原创 2020-08-15 15:11:38 · 212 阅读 · 0 评论 -
AcWing 3. 完全背包问题 (完全背包dp)
有NN种物品和一个容量是VV的背包,每种物品都有无限件可用。第ii种物品的体积是vivi,价值是wiwi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,VN,V,用空格隔开,分别表示物品种数和背包容积。接下来有NN行,每行两个整数vi,wivi,wi,用空格隔开,分别表示第ii种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<...原创 2020-08-15 13:45:04 · 248 阅读 · 0 评论 -
AcWing 2. 01背包问题(背包DP)
有NN件物品和一个容量是VV的背包。每件物品只能使用一次。第ii件物品的体积是vivi,价值是wiwi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,VN,V,用空格隔开,分别表示物品数量和背包容积。接下来有NN行,每行两个整数vi,wivi,wi,用空格隔开,分别表示第ii件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<N...原创 2020-08-15 11:32:36 · 245 阅读 · 0 评论 -
AcWing 861. 二分图的最大匹配啊(匈牙利算法)
给定一个二分图,其中左半部包含n1n1个点(编号1~n1n1),右半部包含n2n2个点(编号1~n2n2),二分图共包含m条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。输入格式第一行包含三个整数n1n1、n2n2和mm。...原创 2020-08-13 14:37:39 · 414 阅读 · 0 评论 -
AcWing 860. 染色法判定二分图(染色法)
给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数u和v,表示点u和点v之间存在一条边。输出格式如果给定图是二分图,则输出“Yes”,否则输出“No”。数据范围1≤n,m≤1051≤n,m≤105输入样例:4 41 31 42 32 4输出样例:Yesimport java.io.*;import java.lang.*;import .原创 2020-08-13 13:25:30 · 358 阅读 · 0 评论 -
AcWing 859. Kruskal算法求最小生成树(Kruskal算法求最小生成树)
给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每行包含三个整数u,v,w,表示点u和点v之间存在一条权原创 2020-08-13 11:08:42 · 208 阅读 · 0 评论 -
AcWing 858. Prim算法求最小生成树(Prim算法求最小生成树)
给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每行包含三个整数u,v,w,表示点u和点v之间存在一条权原创 2020-08-13 10:38:58 · 319 阅读 · 0 评论 -
AcWing 854. Floyd求最短路(弗洛伊德算法求多源最短路)
给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离,如果路径不存在,则输出“impossible”。数据保证图中不存在负权回路。输入格式第一行包含三个整数n,m,k接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。接下来k行,每行包含两个整数x,y,表示询问点x到点y的最短距离。输出格式共k行,每行输出一个整数,表示询问的结果,若询问两点间不存在路径原创 2020-08-12 11:28:20 · 296 阅读 · 0 评论 -
AcWing 852. spfa判断负环(SPFA算法)
给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。请你判断图中是否存在负权回路。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式如果图中存在负权回路,则输出“Yes”,否则输出“No”。数据范围1≤n≤20001≤n≤2000,1≤m≤100001≤m≤10000,图中涉及边长绝对值均不超过10000。输入样例:3 31 2 -12 3 43 1 -4输出样.原创 2020-08-11 21:07:07 · 363 阅读 · 0 评论 -
AcWing 851. spfa求最短路(SPFA算法)
给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。数据保证不存在负权回路。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出”impossible”。数据范围1≤n,m≤1051≤n,m≤105,图中涉及边长绝对值均不超过.原创 2020-08-11 20:39:54 · 312 阅读 · 0 评论 -
AcWing 853. 有边数限制的最短路(Bellman-Ford算法)
时间复杂度:O(nm)给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible。注意:图中可能存在负权回路。输入格式第一行包含三个整数n,m,k。接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示从1号点到n号点的最多经过k条边的最短距离。如果不存在满足条件的路径,则输出“impossibl...原创 2020-08-11 19:12:16 · 305 阅读 · 0 评论 -
AcWing 850. Dijkstra求最短路 II(堆优化版最短路)
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据范围1≤n,m≤1.5×1051≤n,m≤1.5×105,图中涉及边长均不小于0,且不超过10000。输入样例:3 3原创 2020-08-11 11:57:35 · 263 阅读 · 0 评论 -
AcWing 849. Dijkstra求最短路 I(Dijkstra)
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据范围1≤n≤5001≤n≤500,1≤m≤1051≤m≤105,图中涉及边长均不超过10000。输入样例:3 31 2原创 2020-08-11 10:14:45 · 290 阅读 · 0 评论