kuangbin最短路练习
山东章鱼哥
这个作者很懒,什么都没留下…
展开
-
N - Tram
本题使用可以使用dij,floyd,spfa来做,据说可以用bellman来做,但我写的是wa,但过了样例:先放dij:#include#include#includeusing namespace std; const int maxn=100+10;const int INF=1e7;int vis[maxn],dis[maxn];int v[maxn][maxn];s原创 2018-01-30 21:42:06 · 197 阅读 · 0 评论 -
K - Candies
本题要求1~n之间相隔最大值,而题目给出的权值即为最大值,所以转化为最短路问题;照例试了四种算法,只有spfa奏效,bellman_ford超时,其余两种实现不了spfa:#include#include#include #include#includeusing namespace std;typedef long long ll;const int maxn=1e6+10原创 2018-01-29 14:25:43 · 357 阅读 · 0 评论 -
关于最短路的几种算法的模板总结
最近在做kuangbin的最短路专题,把常用的一些算法模板贴一下 至于spfa和bellman_ford,floyd可以去I题找一下,但是floyd有多种应用方法,就没有详细叙述了,反正也是给自己看的 dij:“` void dij(int x) { for(int i=1;i<=n;i++) dis[i]=v[x][i]; dis[x]=0;vis[x原创 2018-01-28 22:42:42 · 136 阅读 · 0 评论 -
J - Invitation Cards
本题的题意是要求出从起点到各个点的所有最小权值和,并且要反过来再求一遍,本题用spfa来做,本来想用bellman_ford来做的,但试了一下超时了,故给出spfa,但我还是在后面贴出超时的代码,也许哪位大佬可以帮我看看;另外感觉自己写代码越来越模式化了。。做后面的题目我觉得关键是读懂题意和如何建图的问题了; spfa:#include#include#include #inclu原创 2018-01-28 22:33:26 · 324 阅读 · 0 评论 -
I - Arbitrage
本题是典型的判断正圈的问题,很直接就想到用spfa,和bellman_ford来做,但是没想到可以用floyd来做,比较三种做法,spfa最快,bellman_ford最慢;但也只比floyd慢10多毫秒左右,如果用scanf的话还要更快,下面给出三种解法 spfa:#include<cstdio>#include<queue>#include<stack> #include<cstring原创 2018-01-28 20:54:02 · 242 阅读 · 0 评论 -
H - Cow Contest
本题有floyd传递闭包的题,然后判断总数是否等于n-1就行了 floyd:#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=100+10;int n,m1;int m[maxn][maxn];void floyd(){ for(int k=1;k<=n原创 2018-01-28 17:43:59 · 144 阅读 · 0 评论 -
G - MPI Maelstrom
运用bellman_ford,和spfa来解决这个问题 bellman_ford:#include<iostream>#include<cstring>#include<cstdio>#include<stack>#include<algorithm>using namespace std;const int maxn=5000+10;const int INF=1e6;struc原创 2018-01-28 16:56:40 · 197 阅读 · 0 评论 -
Wormholes
本题依旧跟上题一样,可以运用bellman_ford和spfa来做,但是跟上题不同的是,本题是判断负圈,所以在初始化dis时应该初始化为INF,然后在判断时也要用大于号来进行判断,另外关于spfa有另一种方法,使用head来存上一个节点的序号,但上一题的做法莫名wa,以后就用存头节点的方法来做 bellman_ford:#include<cstdio>#include<queue>#inclu原创 2018-01-28 00:01:42 · 145 阅读 · 0 评论 -
E - Currency Exchange
本题是最短路判断图中是否存在正环的题,可用bellman_ford和spfa来做,记得再第一种做法的结构体的定义中要开大于>100的数,不然会runtime error,关于spfa,利用vector来实现保存,并且用stack来存会比queue快一些,详情见代码 bellman_ford:#include<cstdio>#include<cstring>#include<iostream>原创 2018-01-27 14:58:28 · 190 阅读 · 0 评论 -
D - Silver Cow Party
本题也是利用dij来做,但是注意要算两次,本题可以看成分两次从x出发,并且要注意使用转置,然后最后只要把dis的两个值加起来算最大值就行了 下面是ac代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000+10;cons原创 2018-01-26 17:23:29 · 119 阅读 · 0 评论 -
Heavy Transportation
本题跟frogger那题很像,不同是,一个是取最小的,一个是最大的,同时注意输出的换行的问题 见ac代码,#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000+10;const int INF=100000000;int原创 2018-01-26 16:26:04 · 155 阅读 · 0 评论 -
Frogger
本题还依旧是dij算法来做,但再进行松弛操作时,有一点变化,计算最小最大路,dis[j]=min(dis[j],max(dis[u],g[u][j]); 下面见ac代码#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const原创 2018-01-26 15:13:01 · 120 阅读 · 0 评论 -
A - Til the Cows Come Home
本题为经典的dij算法,刚开始想的时候,想偷懒用floyd来做,发现超时,只有使用dij来做,另外注意有重复边现象,每次都选最小的边来做,有贪心的思维,并且注意这是一个无向图; 下面见ac代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int原创 2018-01-26 14:02:20 · 170 阅读 · 0 评论 -
O - Extended Traffic
本题运用spfa来做,我用了vector优化,和数组来优化的两种方式,没有用bellman_ford来做了,另外注意结构体和vector的定义要用大的那个数组来spfa,vector优化型:#include#include#include#include#include using namespace std;const int maxn = 100005;const i原创 2018-01-31 15:54:27 · 202 阅读 · 0 评论 -
L - Subway
本题最烦是建图的过程,忘记了初始化sum,总是error,后面终于找到了#include#include#include#include#include#includeusing namespace std;const int maxn=30000+10;const int N=200+50;const double INF=1000000000.0;int vis[m原创 2018-01-29 17:21:45 · 241 阅读 · 0 评论 -
M - 昂贵的聘礼
本题用dij来做,那个等级的约束注意一下就行了#include#include#include#includeusing namespace std;const int maxn=100+10;const int INF=1e8;int v[maxn][maxn],dis[maxn],vis[maxn];struct node{ int price,level,alter;原创 2018-01-29 22:05:10 · 212 阅读 · 0 评论