二维SPFA模板,需要的可以学习一下,原创
//BY genskyuine
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int MAXN=10010;
const int MAXM=50010;
int n,m,k,tot;
int dis[MAXN][25],h[MAXN];
bool vis[MAXN][25];
struct Edge{
int v,w,next;
}e[MAXM<<1];
struct Point{
int dis,id,step;
bool friend operator<(Point a,Point b) {
return a.dis>b.dis;
}
}last,now;
void add(int u,int v,int w) {
e[++tot].v=v;
e[tot].w=w;
e[tot].next=h[u];
h[u]=tot;
}
void spfa(){
memset(dis,0x3f,sizeof(dis));
priority_queue<Point> q;
last.id=1;last.dis=0;last.step=0;
q.push(last);
dis[last.id][last.step]=0;vis[last.id][last.step]=1;
while(!q.empty()) {
now=q.top();
q.pop();
vis[now.id][now.step]=0;
for(int i=h[now.id];i;i=e[i].next) {
if(dis[e[i].v][now.step]>dis[n