inline void Dijkstra(){
memset(vis,0,sizeof(vis));
for(int i=1;i<=N;i++) dis[i]=2147483647;
priority_queue< pair<int,int> > Q;
Q.push(make_pair(0,S)); dis[S]=0;
for(;Q.size();){
int x=Q.top().second; Q.pop();
if(vis[x]) continue;
++vis[x];
for(int i=lin[x];i;i=e[i].Next){
if(dis[x]+e[i].v<dis[e[i].Id]){
dis[e[i].Id]=dis[x]+e[i].v;
Q.push(make_pair(-dis[e[i].Id],e[i].Id));
}
}
}
}
inline void Spfa(){
memset(vis,0,sizeof(vis));
for(int i=1;i<=N;i++) dis[i]=2147483647;
queue<int> Q;
Q.push(S); vis[S]=1; dis[S]=0;
for(;Q.size();){
int x=Q.front(); Q.pop(); --vis[x];
for(int i=lin[x];i;i=e[i].Next){
if(dis[x]+e[i].v<dis[e[i].Id]){
dis[e[i].Id]=dis[x]+e[i].v;
if(!vis[e[i].Id])
Q.push(e[i].Id),
++vis[e[i].Id];
}
}
}
}
inline bool Spfa(){
...
for(;Q.size();){
int x=Q.front();
...
++Ago[x];
if(Ago[x]>=N) return true;
for(int i=lin[x];i;i=e[i].Next){
...
}
}
return false;
}
inline void Floyed(){
for(int k=1;k<=N;k++)
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
F[i][j]=F[i][k]+F[k][j];
}