AcWing Elementary Course
文章平均质量分 60
记录 AcWing 算法基础课学习过程与笔记
柃歌
夏天的海边有冰淇淋口味的海风
展开
-
【模板题】贪心-推公式
一、AcWing 125. 耍杂技的牛【题目描述】农民约翰的NNN头奶牛(编号为1∼N1\sim N1∼N)计划逃跑并加入马戏团,为此它们决定练习表演杂技。奶牛们不是非常有创意,只提出了一个杂技表演:叠罗汉,表演时,奶牛们站在彼此的身上,形成一个高高的垂直堆叠。奶牛们正在试图找到自己在这个堆叠中应该所处的位置顺序。这NNN头奶牛中的每一头都有着自己的重量WiW_iWi以及自己的强壮程度SiS_iSi。一头牛支撑不住的可能性取决于它头上所有牛的总重量(不包括它自己)减去它的身体强壮程度的值,原创 2022-03-17 22:13:47 · 185 阅读 · 0 评论 -
【模板题】贪心-绝对值不等式
一、AcWing 104. 货仓选址【题目描述】在一条数轴上有NNN家商店,它们的坐标分别为A1∼ANA_1\sim A_NA1∼AN。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。【输入格式】第一行输入整数NNN。第二行NNN个整数A1∼ANA_1∼A_NA1∼AN。【输出格式】输出一个整数,表示距离之和的最小值。【数据范围】1≤N≤1000001≤N≤1000001≤N≤100原创 2022-03-17 21:43:59 · 265 阅读 · 0 评论 -
【模板题】贪心-排序不等式
一、AcWing 913. 排队打水【题目描述】有nnn个人排队到111个水龙头处打水,第iii个人装满水桶所需的时间是tit_iti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?【输入格式】第一行包含整数nnn。第二行包含nnn个整数,其中第iii个整数表示第iii个人装满水桶所花费的时间tit_iti。【输出格式】输出一个整数,表示最小的等待时间之和。【数据范围】1≤n≤1051≤n≤10^51≤n≤1051≤ti≤1041≤t_i≤10^41≤ti≤104【输原创 2022-03-17 21:40:43 · 294 阅读 · 0 评论 -
【模板题】贪心-Huffman树
一、AcWing 148. 合并果子【题目描述】在一个果园里,达达已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。达达决定把所有的果子合成一堆。每一次合并,达达可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n−1n-1n−1次合并之后,就只剩下一堆了。达达在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以达达在合并果子时要尽可能地节省体力。假定每个果子重量都为111,并且已知果子的种类数和每种果子的数原创 2022-03-17 21:37:14 · 117 阅读 · 0 评论 -
【模板题】贪心-区间问题
一、AcWing 905. 区间选点【题目描述】给定NNN个闭区间[ai,bi][a_i,b_i][ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作区间内。【输入格式】第一行包含整数NNN,表示区间数。接下来NNN行,每行包含两个整数ai,bia_i,b_iai,bi,表示一个区间的两个端点。【输出格式】输出一个整数,表示所需的点的最小数量。【数据范围】1≤N≤1051≤N≤10^51≤N≤105−原创 2022-03-17 21:29:37 · 154 阅读 · 0 评论 -
【模板题】几种常见的Nim游戏(博弈论)
【题目描述】给定nnn堆石子,两位玩家轮流操作,每次操作可以从任意一堆石子中拿走任意数量的石子(可以拿完,但不能不拿),最后无法进行操作的人视为失败。问如果两人都采用最优策略,先手是否必胜。【输入格式】第一行包含整数nnn。第二行包含nnn个数字,其中第iii个数字表示第iii堆石子的数量。【输出格式】如果先手方必胜,则输出Yes。否则,输出No。【数据范围】1≤n≤1051≤n≤10^51≤n≤1051≤每堆石子数≤1091≤每堆石子数≤10^91≤每堆石子数≤109【输入样例】原创 2021-10-26 20:37:11 · 8517 阅读 · 1 评论 -
【模板题】容斥原理
【题目描述】给定一个整数nnn和mmm个不同的质数p1,p2,…,pmp_1,p_2,…,p_mp1,p2,…,pm。请你求出1∼n1∼n1∼n中能被p1,p2,…,pmp_1,p_2,…,p_mp1,p2,…,pm中的至少一个数整除的整数有多少个。【输入格式】第一行包含整数nnn和mmm。第二行包含mmm个质数。【输出格式】输出一个整数,表示满足条件的整数的个数。【数据范围】1≤m≤161≤m≤161≤m≤161≤n,pi≤1091≤n,p_i≤10^91≤n,pi≤10原创 2021-10-26 17:34:42 · 231 阅读 · 0 评论 -
【模板题】卡特兰数(AcWing 889. 满足条件的01序列)
【题目描述】给定nnn个000和nnn个111,它们将按照某种顺序排成长度为2n2n2n的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中000的个数都不少于111的个数的序列有多少个。输出的答案对109+710^9+7109+7取模。【输入格式】共一行,包含整数nnn。【输出格式】共一行,包含一个整数,表示答案。【数据范围】1≤n≤1051≤n≤10^51≤n≤105【输入样例】3【输出样例】5【分析】将010101序列置于坐标系中,起点定于原点。000表示向右走原创 2021-10-26 15:24:05 · 217 阅读 · 1 评论 -
【模板题】求组合数 / Lucas定理
前言组合是数学的重要概念之一。从nnn个不同元素中,任取m(m≤n)m(m≤n)m(m≤n)个元素并成一组,叫做从nnn个不同元素中取出mmm个元素的一个组合;从nnn个不同元素中取出m(m≤n)m(m≤n)m(m≤n)个元素的所有组合的个数,叫做从nnn个不同元素中取出mmm个元素的组合数,记为CnmC_{n}^{m}Cnm。计算组合数的一些基本公式:Cnm=n!m!(n−m)!,Cn0=1C_{n}^{m}=\frac {n!}{m!(n-m)!},C_{n}^{0}=1Cnm=m!(n−原创 2021-10-26 10:09:45 · 315 阅读 · 0 评论 -
【模板题】高斯消元解(异或)线性方程组
一、高斯消元解线性方程组【题目描述】输入一个包含nnn个方程nnn个未知数的线性方程组。方程组中的系数为实数。求解这个方程组。一个包含mmm个方程nnn个未知数的线性方程组示例如下:{a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2…am1x1+am2x2+⋯+amnxn=bm\left\{\begin{aligned}&a_{11}x_1+a_{12}x_2+\dots +a_{1n}x_n=b_1 \\&a_{21}x_1+a_{原创 2021-10-25 22:07:37 · 1591 阅读 · 2 评论 -
【模板题】扩展中国剩余定理
【题目描述】给定2n2n2n个整数a1,a2,∼,ana_1,a_2,\sim ,a_na1,a2,∼,an和m1,m2,∼,mnm_1,m_2,\sim ,m_nm1,m2,∼,mn,求一个最小的非负整数xxx,满足∀i∈[1,n],x≡mi(mod ai)∀i∈[1,n],x≡m_i(mod\ a_i)∀i∈[1,n],x≡mi(mod ai)。【输入格式】第111行包含整数nnn。第2∼n+12\sim n+12∼n+1行:每i+1i+1i+1行包含两个整数原创 2021-10-20 17:10:09 · 148 阅读 · 0 评论 -
【模板题】扩展欧几里得算法与线性同余方程
【题目描述】给定nnn对正整数ai,bia_i,b_iai,bi,对于每对数,求出一组xi,yix_i,y_ixi,yi,使其满足ai×xi+bi×yi=gcd(ai,bi)a_i\times x_i+b_i\times y_i=gcd(a_i,b_i)ai×xi+bi×yi=gcd(ai,bi)。【输入格式】第一行包含整数nnn。接下来nnn行,每行包含两个整数ai,bia_i,b_iai,bi。【输出格式】输出共nnn行,对于每组ai,bia_i,b_iai,bi原创 2021-10-20 14:41:10 · 177 阅读 · 0 评论 -
【模板题】快速幂(求逆元)
什么是快速幂?快速幂能够快速求出ab % pa^b\ \% \ pab % p的问题,时间复杂度为O(logb)O(logb)O(logb),对于nnn组数据,那么时间复杂度为O(n∗logb)O(n∗logb)O(n∗logb)先来看一下朴素求解ab % pa^b\ \% \ pab % p的代码,基本思路是对于nnn组数据,分别循环bbb次求出ab % pa^b\ \% \ pab %&nb原创 2021-10-18 15:30:24 · 256 阅读 · 0 评论 -
【模板题】欧拉函数与线性筛求欧拉函数
欧拉函数是什么?定义:对于正整数nnn,欧拉函数是小于或等于nnn的正整数中与nnn互质的数的个数,记作φ(n)\varphi (n)φ(n).φ(1)=1\varphi (1)=1φ(1)=1如何求NNN的欧拉值?首先, 欧拉函数是一个积性函数,当m,nm,nm,n互质时,φ(mn)=φ(m)∗φ(n)\varphi (mn)=\varphi (m)∗\varphi (n)φ(mn)=φ(m)∗φ(n)根据唯一分解定理知n=p1a1∗p2a2∗…∗pxaxn=p_{1}^{a_1}∗p_{2}^原创 2021-10-18 12:40:50 · 227 阅读 · 0 评论 -
【模板题】最大公约数
【题目描述】给定nnn对正整数ai,bia_i,b_iai,bi,请你求出每对数的最大公约数。【输入格式】第一行包含整数nnn。接下来nnn行,每行包含一个整数对ai,bia_i,b_iai,bi。【输出格式】输出共nnn行,每行输出一个整数对的最大公约数。【数据范围】1≤n≤1051≤n≤10^51≤n≤1051≤ai,bi≤2×1091≤a_i,b_i≤2×10^91≤ai,bi≤2×109【输入样例】23 64 6【输出样例】32gcdgcdgcd不用原创 2021-10-17 17:32:49 · 202 阅读 · 0 评论 -
【模板题】约数个数、约数之和
【题目描述】给定nnn个正整数aia_iai,请你输出这些数的乘积的约数个数(之和),答案对109+710^9+7109+7取模。【输入格式】第一行包含整数nnn。接下来nnn行,每行包含一个整数aia_iai。【输出格式】输出一个整数,表示所给正整数的乘积的约数个数(之和),答案需对109+710^9+7109+7取模。【数据范围】1≤n≤1001≤n≤1001≤n≤1001≤ai≤2×1091≤a_i≤2×10^91≤ai≤2×109【输入样例】3268【输出样例】原创 2021-10-17 16:31:32 · 343 阅读 · 0 评论 -
【模板题】试除法求约数
【题目描述】给定nnn个正整数aia_iai,对于每个整数aia_iai,请你按照从小到大的顺序输出它的所有约数。【输入格式】第一行包含整数nnn。接下来nnn行,每行包含一个整数aia_iai。【输出格式】输出共nnn行,其中第iii行输出第iii个整数aia_iai的所有约数。【数据范围】1≤n≤1001≤n≤1001≤n≤1002≤ai≤2×1092≤a_i≤2×10^92≤ai≤2×109【输入样例】268【输出样例】1 2 3 6 1 2 4 8 试原创 2021-10-17 14:02:45 · 157 阅读 · 0 评论 -
【模板题】筛质数(埃氏筛法、线性筛法)
【题目描述】给定一个正整数nnn,请你求出1∼n1\sim n1∼n中质数的个数。【输入格式】共一行,包含整数nnn。【输出格式】共一行,包含一个整数,表示1∼n1\sim n1∼n中质数的个数。【数据范围】1≤n≤1061≤n≤10^61≤n≤106【输入样例】8【输出样例】4①朴素筛法O(nlogn)O(nlogn)O(nlogn)void get_primes(){ for (int i = 2; i <= n; i++) { if (!st[i]) pr原创 2021-10-17 13:44:08 · 227 阅读 · 0 评论 -
【模板题】分解质因数
【题目描述】给定nnn个正整数aia_iai,将每个数分解质因数,并按照质因数从小到大的顺序输出每个质因数的底数和指数。【输入格式】第一行包含整数nnn。接下来nnn行,每行包含一个正整数aia_iai。【输出格式】对于每个正整数aia_iai,按照从小到大的顺序输出其分解质因数后,每个质因数的底数和指数,每个底数和指数占一行。每个正整数的质因数全部输出完毕后,输出一个空行。【数据范围】1≤n≤1001≤n≤1001≤n≤1001≤ai≤2×1091≤a_i≤2×10^91≤ai原创 2021-10-17 11:13:58 · 373 阅读 · 0 评论 -
【模板题】试除法判定质数
【题目描述】给定nnn个正整数aia_iai,判定每个数是否是质数。【输入格式】第一行包含整数nnn。接下来nnn行,每行包含一个正整数aia_iai。【输出格式】共nnn行,其中第iii行输出第iii个正整数aia_iai是否为质数,是则输出Yes,否则输出No。【数据范围】1≤n≤1001≤n≤1001≤n≤1001≤ai≤231−11≤a_i≤2^{31}−11≤ai≤231−1【输入样例】226【输出样例】YesNo【分析】质数的定义:在大于111的整原创 2021-10-17 10:34:34 · 158 阅读 · 0 评论 -
【模板题】记忆化搜索(滑雪)
【题目描述】给定一个RRR行CCC列的矩阵,表示一个矩形网格滑雪场。矩阵中第iii行第jjj列的点表示滑雪场的第iii行第jjj列区域的高度。一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。下面给出一个矩阵作为例子: 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9在给定矩阵中,一条可行的滑行原创 2021-10-13 17:25:07 · 117 阅读 · 0 评论 -
【模板题】树形DP(没有上司的舞会)
【题目描述】UralUralUral大学有NNN名职员,编号为1∼N1∼N1∼N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数HiH_iHi给出,其中1≤i≤N1≤i≤N1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。【输入格式】第一行一个整数NNN。接下来NNN行,第iii行表示iii号职员的快乐指数HiH_i原创 2021-10-13 21:19:35 · 102 阅读 · 0 评论 -
【模板题】状态压缩DP(蒙德里安的梦想 / 最短Hamilton路径)
一、蒙德里安的梦想【题目描述】求把N×MN×MN×M的棋盘分割成若干个1×21×21×2的长方形,有多少种方案。例如当N=2,M=4N=2,M=4N=2,M=4时,共有555种方案。当N=2,M=3N=2,M=3N=2,M=3时,共有333种方案。如下图所示:【输入格式】输入包含多组测试用例。每组测试用例占一行,包含两个整数NNN和MMM。当输入用例N=0,M=0N=0,M=0N=0,M=0时,表示输入终止,且该用例无需处理。【输出格式】每个测试用例输出一个结果,每个结果占一行。【数原创 2021-10-13 17:03:26 · 196 阅读 · 0 评论 -
【模板题】数位统计DP(计数问题)
【题目描述】给定两个整数aaa和bbb,求aaa和bbb之间的所有数字中0∼90∼90∼9的出现次数。例如,a=1024,b=1032a=1024,b=1032a=1024,b=1032,则aaa和bbb之间共有999个数如下:1024 1025 1026 1027 1028 1029 1030 1031 1032其中0出现101010次,1出现101010次,2出现777次,3出现333次等等…【输入格式】输入包含多组测试数据。每组测试数据占一行,包含两个整数aaa和bbb。当读入一行为0原创 2021-10-12 14:39:35 · 142 阅读 · 0 评论 -
【模板题】计数类DP(整数划分)
【题目描述】一个正整数nnn可以表示成若干个正整数之和,形如:n=n1+n2+…+nkn=n_1+n_2+…+n_kn=n1+n2+…+nk,其中n1≥n2≥…≥nk,k≥1n_1≥n_2≥…≥n_k,k≥1n1≥n2≥…≥nk,k≥1。我们将这样的一种表示称为正整数nnn的一种划分。现在给定一个正整数nnn,请你求出nnn共有多少种不同的划分方法。【输入格式】共一行,包含一个整数nnn。【输出格式】共一行,包含一个整数,表示总划分数量。由于答案可能很大,输出结果请对109+71原创 2021-10-12 11:35:56 · 194 阅读 · 0 评论 -
【模板题】区间DP(石子合并)
【题目描述】设有NNN堆石子排成一排,其编号为1,2,3,…,N1,2,3,…,N1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这NNN堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有444堆石子分别为1,3,5,21,3,5,21,3,5,2, 我们可以先合并1、21、21、2堆,代价为444,得到4,5,24,5,24,5,2, 又合并1、21、原创 2021-10-11 20:49:41 · 155 阅读 · 0 评论 -
【模板题】线性DP(数字三角形、LIS、LCS、编辑距离)
一、数字三角形【题目描述】给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。 7 3 8 8 1 0 2 7 4 44 5 2 6 5【输入格式】第一行包含整数nnn,表示数字三角形的层数。接下来nnn行,每行包含若干整数,其中第iii行表示数字三角形第iii层包含的整数。【输出格式】输出一个整数,表原创 2021-10-10 22:37:03 · 207 阅读 · 0 评论 -
【模板题】分组背包问题
【题目描述】有NNN组物品和一个容量是VVV的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是vijv_{ij}vij,价值是wijw_{ij}wij,其中iii是组号,jjj是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。【输入格式】第一行有两个整数N,VN,VN,V,用空格隔开,分别表示物品组数和背包容量。接下来有NNN组数据:每组数据第一行有一个整数SiS_iSi,表示第iii个物品组的物品数量;每组数据接下原创 2021-10-10 19:45:08 · 166 阅读 · 0 评论 -
【模板题】多重背包问题
【题目描述】有NNN种物品和一个容量是VVV的背包。第iii种物品最多有sis_isi件,每件体积是viv_ivi,价值是wiw_iwi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。【输入格式】第一行两个整数,N,VN,VN,V,用空格隔开,分别表示物品种数和背包容积。接下来有NNN行,每行三个整数vi,wi,siv_i,w_i,s_ivi,wi,si,用空格隔开,分别表示第iii种物品的体积、价值和数量。【输出格式】输出一个整数,表示原创 2021-10-10 14:09:17 · 510 阅读 · 0 评论 -
【模板题】完全背包问题
【题目描述】有NNN种物品和一个容量是VVV的背包,每种物品都有无限件可用。第iii种物品的体积是viv_ivi,价值是wiw_iwi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。【输入格式】第一行两个整数,N,VN,VN,V,用空格隔开,分别表示物品种数和背包容积。接下来有NNN行,每行两个整数vi,wiv_i,w_ivi,wi,用空格隔开,分别表示第iii种物品的体积和价值。【输出格式】输出一个整数,表示最大价值。【数据范围】0&原创 2021-10-10 11:16:43 · 167 阅读 · 0 评论 -
【模板题】01背包问题
【题目描述】有NNN件物品和一个容量是VVV的背包。每件物品只能使用一次。第iii件物品的体积是viv_ivi,价值是wiw_iwi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。【输入格式】第一行两个整数N,VN,VN,V,用空格隔开,分别表示物品数量和背包容积。接下来有NNN行,每行两个整数vi,wiv_i,w_ivi,wi,用空格隔开,分别表示第iii件物品的体积和价值。【输出格式】输出一个整数,表示最大价值。【数据范围】0<原创 2021-10-10 09:32:47 · 147 阅读 · 0 评论 -
【模板题】二分图的最大匹配(匈牙利算法)
【题目描述】给定一个二分图,其中左半部包含n1n_1n1个点(编号1∼n11∼n_11∼n1),右半部包含n2n_2n2个点(编号 1∼n21∼n_21∼n2),二分图共包含mmm条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图GGG,在GGG的一个子图MMM中,MMM的边集{EEE}中的任意两条边都不依附于同一个顶点,则称MMM是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最原创 2021-10-09 09:19:51 · 169 阅读 · 0 评论 -
【模板题】染色法判定二分图(DFS遍历图)
【题目描述】给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。【输入格式】第一行包含两个整数n和m。接下来m行,每行包含两个整数u和v,表示点u和点v之间存在一条边。【输出格式】如果给定图是二分图,则输出Yes,否则输出No。【数据范围】1≤n,m≤1e5【输入样例】4 41 31 42 32 4【输出样例】Yes#include <iostream>#include <cstring>#include &l原创 2021-10-08 19:48:55 · 239 阅读 · 0 评论 -
【模板题】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之间存在一原创 2021-10-08 17:42:48 · 737 阅读 · 0 评论 -
【模板题】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之间存在一原创 2021-10-08 17:00:48 · 967 阅读 · 0 评论 -
【模板题】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行,每行输出一个整数,表示询问的结果,若询问两点间不存在原创 2021-10-08 16:55:07 · 185 阅读 · 0 评论 -
【模板题】SPFA(有负权边的单源最短路 / 判断负环)
一、SPFA求带负权边的单源最短路问题【题目描述】给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。数据保证不存在负权回路。【输入格式】第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。【输出格式】输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出impossible。【数据范围】1≤n,m≤1e5图中原创 2021-10-08 13:02:49 · 341 阅读 · 0 评论 -
【模板题】Bellman-Ford(有边数限制的最短路)
【题目描述】给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输出impossible。注意:图中可能存在负权回路。【输入格式】第一行包含三个整数n,m,k。接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。【输出格式】输出一个整数,表示从1号点到n号点的最多经过k条边的最短距离。如果不存在满足条件的路径,则输出impossible。【数据范围】1≤n原创 2021-10-08 12:26:27 · 224 阅读 · 0 评论 -
【模板题】朴素版Dijkstra / 堆优化版Dijkstra(无负权边的单源最短路)
【题目描述】给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出−1。【输入格式】第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。【输出格式】输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出−1。【数据范围】1≤n≤5001≤m≤1e5图中涉及边长均不超过10000【输入样例】3 31 2 22 3 11 3 4原创 2021-10-08 10:17:17 · 175 阅读 · 0 评论 -
【模板题】拓扑排序
一、AcWing 848. 有向图的拓扑序列【题目描述】给定一个nnn个点mmm条边的有向图,点的编号是1∼n1\sim n1∼n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出−1-1−1。若一个由图中所有点构成的序列AAA满足:对于图中的每条边(x,y)(x,y)(x,y),xxx在AAA中都出现在yyy之前,则称AAA是该图的一个拓扑序列。【输入格式】第一行包含两个整数nnn和mmm。接下来mmm行,每行包含两个整数xxx和yyy,表示存在一条从点x原创 2022-03-14 08:27:39 · 342 阅读 · 0 评论