最短路径算法
穷源溯流
路很长,尽管走便是。
展开
-
POJ 3268 Silver Cow Party(SPFA)
有 n 个点 m 条单向边,起点为 x,问从每一个点 i 到 x 的距离 + 从 x 到 i 的距离最大是多少开始建一个有向图,再将有向图的起点与终点置换,两次以 x 为起点的 SPFA 即可const int M=1e5+5;const int N=1000+5; int n,m,t; int i,j,k; vector<Pair> E[M]; bool inq[N]; int d[N]; void init()...原创 2020-08-09 14:58:04 · 167 阅读 · 0 评论 -
POJ 2387 Til the Cows Come Home(带 vector 的 SPFA)
const int N=1000+5; int n,m,t; int i,j,k; vector<Pair> E[N]; bool inq[N]; int d[N]; void init(){ for(i=0;i<N;i++) { E[i].clear(); inq[i]=0; d[i]=inf; }}void SPFA(int s){ queue...原创 2020-08-08 22:10:44 · 183 阅读 · 0 评论 -
HDU 2544 最短路(Dijkstra || SPFA)
Dijkstra:Spfa:const int N=2e5+5; int n,m,t; int i,j,k; int head[N],all=0;//id,edge_num int d[N]; //点 i 到起点的距离 bool vis[N];struct Edge{ int to,next; int w;}G[N];void add(int u,int v,int w){ G[all].w=w; ...原创 2020-08-07 21:28:38 · 383 阅读 · 0 评论 -
GYM 101147 E. Jumping(最短路径转化+spfa)
有 n 个点,每个点 i 都可以传送到 i+x,或 i-x 的位置(每个点必须满足在区间 [1,n] 上),求每个点 i 到达 n 的最小传送次数将 i -> i-x 转化为 起点为 i ,终点为 i-x,边权为 1 的路径,借助最短路径算法求解const int N=2e5+5; int n,m,t; int i,j,k; int head[N],all=0; int d[N]; //点 i 到起点的距离 bool vis[N]...原创 2020-08-07 16:06:14 · 216 阅读 · 0 评论 -
HDU 2066 一个人的旅行(spfa)
假设 0 为虚拟起点,SPFA 求解即可const int N=1e4+5; int n,m,t; int i,j,k; int head[N],all=0; int d[N]; //点 i 到起点的距离 int cnt[N]; //点 i 的入队次数 bool vis[N];struct node{ int to,next; int w;}G[N];void add(int u,int v,int w){ ...原创 2020-08-07 14:16:18 · 190 阅读 · 0 评论 -
POJ 3259 Wormholes(spfa 判断负环)
有 n 个点,m 条无向边,t 条有向边,判断图是否存在负环const int N=1e4+5; int n,m,t; int i,j,k; int head[N],all=0; int d[N]; //点 i 到起点的距离 int cnt[N]; //点 i 的入队次数 bool vis[N];struct node{ int to,next; int w;}G[N];void add(int u,int v,...原创 2020-08-07 11:29:12 · 212 阅读 · 0 评论 -
HDU 2680 Choose the best route(dij)
有 n 个地点,有 m 个条路,以及终点 e给出 m 条路的起点和终点,以及路费再给出 q 个起始点,求到达 e 点最小花费默认起始点为 0 ,利用 dij 求解const int N=1000+5; int n,m,t; int i,j,k; int d[N]; int f[N][N]; bool vis[N];void Dijkstra(int s){ for(int i=0;i<=n;i++){ ...原创 2020-08-06 20:23:33 · 219 阅读 · 0 评论 -
POJ 2253 Frogger(dij)
有两只青蛙,分别在第 1,2,个位子上,其他的位子都是石头,现在青蛙 1 出发找 2,但是他的体力有限,所以要求你寻找一条路径,使得能够到达 2 号点的最短路径 并且 相邻的两块石头的最大距离尽可能的短const int N=200+5; int n,m,t; int i,j,k; double d[N];//源点到任一点 i 的最长距离 double f[N][N]; bool vis[N];int x[N],y[N];double dis(i...原创 2020-08-06 18:03:13 · 270 阅读 · 0 评论 -
Bus System (dij)
Because of the huge population of China, public transportation is very important. Bus is an important transportation method in traditional public transportation system. And it’s still playing an important role even now.The bus system of City X is quite...原创 2020-05-16 09:01:21 · 536 阅读 · 0 评论 -
Restoring Road Network (Floyed)
Problem StatementIn Takahashi Kingdom, which once existed, there are Ncities, and some pairs of cities are connected bidirectionally by roads. The following are known about the road network:People traveled between cities only through roads. It ...原创 2020-05-13 15:43:52 · 229 阅读 · 0 评论 -
1345:香甜的黄油
【题目描述】 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1≤N≤500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油。当然,他将付出额外的费用在奶牛上。 农夫John很狡猾。像以前的巴甫洛夫,他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场。他打算将糖放在那里然后下午发出铃声,以至他可以在晚上挤奶。 农夫J...原创 2020-04-17 11:50:51 · 636 阅读 · 0 评论 -
1382:最短路(Spfa)
【题目描述】 给定 M 条边, N 个点的带权无向图。求 1到 N 的最短路。 【输入】 第一行:N,M(N≤100000,M≤500000); 接下来M行3个正整数:ai,bi,ci表示ai,bi之间有一条长度为ci的路,ci≤1000。 【输出】 一个整数,表示 1 到 N 的最短距离。 【输入样例】 4 41...原创 2020-04-17 11:31:40 · 971 阅读 · 0 评论 -
1379:热浪(heatwv)(dijkstar)
#include <bits/stdc++.h>#define rush() int T;cin>>T;while(T--)#define sf(a) scanf("%d\n",&a)#define go(a) while(scanf("%d",&a)!=EOF)#define ms(a,b) memset(a,b,sizeof a)#defin...原创 2020-04-16 14:29:07 · 814 阅读 · 0 评论 -
1376:信使(msner)(dijkstar)
#include <bits/stdc++.h>#define rush() int T;cin>>T;while(T--)#define sf(a) scanf("%d\n",&a)#define go(a) while(scanf("%d",&a)!=EOF)#define ms(a,b) memset(a,b,sizeof a)#de...原创 2020-04-16 14:29:36 · 796 阅读 · 0 评论 -
1381:城市路(Dijkstra)
#include <bits/stdc++.h>#define rush() int T;cin>>T;while(T--)#define sf(a) scanf("%d\n",&a)#define go(a) while(scanf("%d",&a)!=EOF)#define ms(a,b) memset(a,b,sizeof a)#defin...原创 2020-04-16 14:28:23 · 564 阅读 · 0 评论 -
1344:最小花费
#include <bits/stdc++.h>#define rush() int T;cin>>T;while(T--)#define sf(a) scanf("%d\n",&a)#define go(a) while(scanf("%d",&a)!=EOF)#define ms(a,b) memset(a,b,sizeof a)#defin...原创 2020-04-16 14:27:35 · 451 阅读 · 0 评论 -
1342:最短路径问题
【题目描述】 平面上有n个点(n≤100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。 若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现在的任务是找出从一点到另一点之间的最短路径。 【输入】 共n+m+3行,其中: 第一行为整数n。 第2行到第n+1行(共n行) ,每行两个整...原创 2020-04-15 07:06:44 · 485 阅读 · 1 评论