![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
最短路
文章平均质量分 53
1
kaka0010
退役ACMer/算法竞赛菜鸡
展开
-
2021牛客暑期多校训练营7 J. xay loves Floyd 预处理最短路+bitset
原题链接:https://ac.nowcoder.com/acm/contest/11258/J目录题意分析Code题意正确的弗洛伊德算法是依照枚举k, i, j的顺序,k是转移的中间点,i是出发点,j是到达点。现在按照i,j,k的枚举顺序,问有多少点对之间的最短路仍然是正确的。分析我们分两种情况来考虑u本来就不能到达v,u和v是同一个点。u通过最短路径dis[u,k]到达k,再通过最短路经dis[k,v]到达v,且k是u,v最短路径上的必经点对于第一种情况我们直接统计就可以了,对于第二原创 2021-08-10 19:33:28 · 134 阅读 · 0 评论 -
Wannafly挑战赛2 B.Travel 最短路+思维
原题链接:https://ac.nowcoder.com/acm/contest/17/B目录题意分析Code题意先给你一个n个点组成的环,现在在上面加m条边,m小于20,最后询问任意两点之间的最短路。分析先从m入手,m非常小,因此肯定是从m条边连接的点出发,去跑2m遍最短路,预处理出这2m个点到图上所有点的最短路。对于xy之间的最短路一定只有三种情况:不经过后加的边,那可以O1直接算出值x到u,u到v,v到yx到v,v到u,u到y因此暴力枚举所有加边,对于这三种情况取一个最小值就可原创 2021-08-06 20:48:29 · 109 阅读 · 0 评论 -
HDU 6582 Path 最短路+最小割
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=6582目录题意分析Code题意有一张图,n个节点m条边,割去一些边使得最短路变长,问割的最小值是多少。分析既然是影响到最短路的长度,因此可以把所有最短路上的边都找出来,选择割掉一些边使得图不连通,这不就是网络流最小割的操作吗。Code#include <iostream>#include <cstdio>#include <cstring>#include原创 2021-04-11 16:04:32 · 81 阅读 · 0 评论 -
HDU 4276 The Ghost Blows Light 最短路+树形背包
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4276目录题意分析Code题意有一棵树,每个节点都有财富wi,每条边都会花费ci的时间,问你有T的时间,从节点1出发到节点n出口最多可以拿走多少宝物。分析非常明显的树形背包的模型,列出状态f[i][j]f[i][j]f[i][j]代表第i个节点及其子树花费j的时间最多取到的财富总和,那么状态转移的方程可以轻松写出f[u][j]=max(f[u][j],f[j−k−cost]+f[v][k])f[u][j原创 2021-04-02 13:34:29 · 173 阅读 · 0 评论 -
牛客练习赛60 D.斩杀线计算大师 同余最短路
原题链接:https://ac.nowcoder.com/acm/contest/4853/D目录题意分析Code题意ax+by+cz=kax+by+cz=kax+by+cz=k求x,y,z的合法取值,并输出一组解求x,y,z的合法取值,并输出一组解求x,y,z的合法取值,并输出一组解分析这题有个简单的做法,就是枚举一个数,然后用拓展欧几里得,这里介绍另一种做法首先对式子进行变形,我们设k=tc+pk=tc+pk=tc+p,这样p就是k%c的值,所以值域就在[0,c)之间,之后我们只要再构造一原创 2021-03-15 17:11:37 · 97 阅读 · 0 评论 -
Codeforces Round #693 (Div. 3) G - Moving to the Capital 最短路+dp
原题链接:https://codeforces.ml/contest/1472/problem/G目录题意分析Code题意有n个点,m条单项边,每个点上有三个操作如果dis[u] < dis[v],可以直接从u到v,可以进行无限次操作如果dis[u] >= dis[v],可以从u到v,只能操作一次待在u节点不动问从i节点出发能到距离1节点最近的距离是多少?分析如果直接建图,然后每个点上遍历一次肯定可以求出答案,但时间会超时,因此考虑记录已经遍历到的节点。先预处理一遍最短原创 2021-03-03 17:52:48 · 134 阅读 · 1 评论 -
2019 ICPC Asia Yinchuan Regional H - Delivery Route 强连通+最短路+拓扑
原题链接:https://nanti.jisuanke.com/t/42388题意有n个点,x条双向边且边权为正,y条单向边边权可以为负,问从某个点出发到全部点的最短距离。分析首先看到负权边,dij不能直接去用。然后就是这题刻意去卡了spfa,但没卡住spfa的玄学优化(可以自己去尝试)。这里说一下本题的正解,利用强连通分量和最短路来求。既然dij不能跑负权边,那我们只要保证让他只跑正权边就可以了,因此在加完双向边之后去找连通块,每个连通块内部跑dij,然后外部用拓扑。这里说两个细节开始原创 2021-03-01 15:02:34 · 317 阅读 · 1 评论 -
【同余最短路】学习笔记 | 例题
目录问题形式基本模型例题跳楼机牛场围栏[国家集训队]墨墨的等式Lazy-Running问题形式给出n个整数,问用这n个整数可以拼出多少整数给出n个整数,问最小不能拼出的整数是多少给出n个整数,问最大不能拼出的整数是多少基本模型这类问题的基本模型其实就是动态规划,用f[i]来表示能被拼出的最小余数为i的数写出转移方程就是 f[(i + y) % mod] = f[i] + y有没有发现和最短路的模型基本一致 (dis[v] = dis[u] + val),因此这类问题就可以用最短路来跑,和原创 2021-02-21 22:12:19 · 237 阅读 · 0 评论 -
CF 1433G G. Reducing Delivery Cost 最短路+暴力枚举
原题链接文章目录题意分析AC Code题意有n个点和m条边的图,接着有k个询问,每次给定两个点ai和bi,问所有dis[ai][bi]之和。其中你可以指定一条边的代价为0。分析由于n的范围是1000,因此我们可以n^2log(m)的复杂度枚举出任意两点之间的距离。接着暴力去枚举边,如果设a,b这条边为0,那么我们考虑询问的两个点之间的距离怎么去计算。如果这条边不影响u,v之间的距离,那么距离还是dis[u][v],如果这条边对u,v之间的距离有影响,那么路径应该是min(dis[u][a] + d原创 2020-12-19 22:27:55 · 184 阅读 · 1 评论 -
双端队列BFS实现01最短路
什么是01最短路顾名思义,边权只有0和1的最短路。算法分析01最短路是最短路类型中比较特殊的一种,当然你也可以用一般的最短路解法(Dijkstra或spfa) 但总所周知利用bfs队列维护,时间复杂度往往只需要o(N)。那该如何实现呢?如果当前处理的点连接的边为0,那么将这个点移至队首,否则移入队尾,这样就可以保证队列的单调性。算法正确性当我们更新到的点边权为0时,那么这个点一定是到当前为止的最短路,所以可以直接将改点移至队首,如果这个点边权为1,那么这个点可能并不是到当前为止最短的,因此我们要将原创 2020-06-01 16:18:29 · 1759 阅读 · 1 评论 -
Shortest-path tree HDU - 4871最小路径生成树+点分治
原题链接题意:给定n个点,m条边。要求在图中找到一棵树,使得所有点到1的距离最短,然后给定k个点,要求经过k个点的路程最长,并求出最长的有几条。分析:转换一下题意,大概分为两个子问题1.求出关于1节点的最小路径生成树2.求出经过k-1条边的路径的最长距离和条数对于问题1,我们可以先跑一边最短路,求出所有点的最短路,然后从1开始遍历节点,如果dis[v] = dis[u] + w,那么说明这条边是合法的,我们就把它连上,因为要求按照字典序最小,所以我们把所有的边按照节点标号sort一下就搞定。对原创 2020-11-12 15:12:27 · 196 阅读 · 0 评论 -
2020ICPC·小米 网络选拔赛第一场 B.Intelligent Robot 最短路+计算几何
原题链接题意:给定起点和终点还有一些线段,要求不能穿越线段从起点到终点的最短路径。注意线段的端点是可以选的,而且可以沿着线段走。考虑到k的范围只有300,因此考虑到n^3的枚举,我们可以枚举每两个点,然后再根据k条线判断是否相交,如果都不相交,那么就可以在两点之间连一条线了。至于判断是否相交,我们可以用向量叉积的方法,详细证明就不多说了。#include <bits/stdc++.h>using namespace std;#define ACM_LOCALtypedef l原创 2020-10-30 14:49:05 · 261 阅读 · 0 评论 -
洛谷P4568 [JLOI2011]飞行路线 (分层图最短路)
原题连接题意在m条航线中,可以选择k条路线免费,问从st到ed的最小花费是多少。观察一下题目数据,n只有2e4而k只有10,因此n*(k+1)个点的时间复杂度也绰绰有余,这时就可以利用分层图的思想来写。解题思路将整个图想象成一个三维的立体空间,那么1到n个点排在第一层,n+1到2n的点排在第2层……依次类推,那么我们可以假设层与层之间的联系为免费的路线,每上一层相当于利用一次免费的机会,层之间当然是只上不下,因此如果有k次免费机会,那么就会有k+1层的图,最后答案肯定在每一层的st中找。#i原创 2020-06-03 18:16:38 · 310 阅读 · 0 评论