首先感谢
某牛人的总结
#include#include #include #include #include using namespace std;#define N 500005#define inf 99999999int head[N],cost[N],nxt[N],pnt[N],e;int dist[N],vis[N];void add(int u,int v,int c){ pnt[e]=v;cost[e]=c;nxt[e]=head[u];head[u]=e++;}int spfa(int s,int e){ for(int i=e;i<=s;i++) { dist[i]=-1;vis[i]=0; } dist[s]=0;vis[s]=1; int Q[N],top=1;Q[0]=s; while(top) { int u=Q[--top];vis[u]=0; for(int i=head[u];i!=-1;i=nxt[i]) { int v=pnt[i]; if(dist[v]