![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
最短路
文章平均质量分 75
无敌大饺子
这个作者很懒,什么都没留下…
展开
-
ZOJ 2750 Idiomatic Phrases Game(邻接表+dijkstra)
把每个idiom看成两个节点,中间连一条边只为该idiom的值,两个能连边的idiom连边,权值设为0,然后各种最短路算法就可以了.这里判断尾部是否等于头部时候,用枚举的话会超时,最好用map来记录相同头部#include #include #include #include #include #include #include using namespace s原创 2013-04-07 11:17:51 · 547 阅读 · 0 评论 -
ZOJ 2281 Way to Freedom
dijkstra算法变形dis[u]存的是到u的最小权值中的最大值.松弛条件则变成了dis[v] = max(min(dis[u], g[u][v]), dis[v])#include #include #include #include using namespace std;const int maxn = 100001;struct edge{ int v, w,原创 2013-05-14 19:46:41 · 518 阅读 · 0 评论 -
ZOJ 1298 Domino Effect
首先dijkstra求出最短路,求的时候顺便求出1能到的最长路记为ans * 2.枚举每条边,满足dis[i] + dis[j] + g[i][j] > ans 更新ans.最后输出答案ans / 2;/* * ZOJ 1298.cpp * * Created on: May 27, 2013 * Author: root */#include #includ原创 2013-05-27 21:23:21 · 447 阅读 · 0 评论 -
ZOJ 2504 Help John!
用 r来保存John他妈妈告诉他的路线,首先要保证这条路必须通,然后再从r[2](第二个点)求到n的最短路,最后输出结果就是了.#include #include #include #include using namespace std;const int maxen = 30010;const int maxn = 1010;struct node{ int i, v原创 2013-05-26 19:25:40 · 457 阅读 · 0 评论 -
ZOJ 2526 FatMouse and JavaBean II
用的dijkstra来做的,加了记录最短路径数量,优先队列取的是最短距离中的最大豆子数的点来松弛.#include #include #include #include using namespace std;const int maxn = 500;struct edge{ int v, w, next;}es[maxn * 3];struct node{ int原创 2013-05-25 23:20:36 · 800 阅读 · 2 评论 -
ZOJ 1430 The Erythea Campaign(最短路)
普通的最短路算法都可以.边算边判断能否连通.#include #include #include #include #include #include #include #define pii pairusing namespace std;const int maxn = 81;char grid[maxn][maxn];bool inq[maxn * maxn]原创 2013-05-06 16:46:37 · 581 阅读 · 0 评论 -
ZOJ 2864 Catch the thief(多条最短路+BFS)
首先把最短路计算出来.然后把查询时间存下来.再从终点开始BFS,如果dis[u] == dis[v] + w 说明点v在最短路上,那么就枚举查询,满足dis[u] > qtime[i] && dis[v] #include #include #include #include #include #include using namespace std;const in原创 2013-05-06 09:44:04 · 676 阅读 · 0 评论 -
ZOJ 2760 How Many Shortest Path(floyd+最大流)
刚开始还屁颠屁颠的找出最短路,删除所有最短路上的边,然后继续找,WA到死.看了题解才知道要用最大流,网络流思想很奇妙.找到最路径中用到的边,将边的容量赋值为1,这么流过去,从起点到终点流这样一条流过去就可以保证为一条最短路径而且没有重复边。现在的题目转化为找最短路路径中用到边。这样的边有这样的性质:Path(s,i)+E(i,j)+Path(j,t)==Path(s原创 2013-05-02 16:14:04 · 568 阅读 · 0 评论 -
ZOJ Walk Through the Forest (dijkstra + BFS || 记忆化搜索)
意思是求 p1,p2,...ph 1到home的路径上 pi到ph的值必须大于 p(i+1)到ph的值.首先dijkstra求出home到所有点的最短路dis[i].然后BFS,统计路径.设pathnum[i]为1到i的路径数量,初始pathnum[1]为1然后入队.对于每一个队列头i 对于每一条边i->j若dis[i] 则把pathnum[j]累加上pathnum[i],原创 2013-05-02 11:51:45 · 586 阅读 · 0 评论 -
ZOJ 3620 Escape Time II(floyd+dfs)
因为每个点都可以访问多次,首先对各个点之间做一次floyd最短路,同一个连通分量的点可以互相走多次,然后进行搜索,搜索时候已经没有珠宝的房间就不要去了,最后当珠宝全部拿到手了,就去出口房间#include #include #include using namespace std;const int maxn=11;#define mmin(a,b) ((a)<(b)?(a):(原创 2013-04-27 08:13:02 · 510 阅读 · 0 评论 -
HDU 1595 find the longest of the shortest
做法就是先求出最短路径,然后枚举每一条最短路的边,每次枚举一条删除掉求最短路,求出最大的长度就是答案了#include #include #include #include #include #include using namespace std;#define pii pairconst int maxn=1010;int g[maxn][maxn],dis[maxn]原创 2013-04-08 08:25:26 · 462 阅读 · 0 评论 -
HDU 1599 find the mincost route
把每一条边删除掉然后求一次这条边顶点之间的最短距离,最短距离加上删除掉的边的权值就是环的权值,然后求出最小环值.如果删除了这条边,两点不连通了 说明两点无法构成一个环.m次dijkstra#include #include #include #include #include #include #define inf 0X20202020#define pii pair原创 2013-04-08 09:33:17 · 647 阅读 · 0 评论 -
HDU 2923 Einbahnstrasse(邻接表+dijkstra)
这题和ZOJ 2008做法一样,求两次最短路,一次是s到各个点,一次是把图反向后s到各个点.两个结果相加就是答案.用spfa或者dijkstra都可以.#include #include #include #include #include using namespace std;const int maxn=110;struct edge{ int v,w,n原创 2013-04-07 15:56:43 · 481 阅读 · 0 评论 -
HDU 2680 Choose the best route(dijkstra)
又是一道最短路,如果普通的按照从w个点到s的最短距离中选择最短的会超时,因为w可能很接近n.可以把所有的边反一下就变成了求从s点到w个点最短距离中的最短距离,复杂度一下子就下来了.参考了网上还有一种方法:设一个超级原点,把这个超级原点和w个起点连边,权值为0,然后求超级原点到s的最短路就是答案的,很巧妙的方法#include #include #include #include原创 2013-04-07 12:54:35 · 493 阅读 · 0 评论 -
蓝桥杯练习系统 ALGO-5 最短路
问题描述给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。输入格式第一行两个整数n, m。接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边。输出格式共n-1行,第i行表示1号点到i+1号点的最短路。样例输入3 31 2 -12 3原创 2014-03-16 19:31:55 · 732 阅读 · 0 评论