floyd
void flyod()
{
for(int k = 1; k <= V; k ++)
for(int i = 1; i <= V; i ++)
for(int j = 1; j <= V; j ++)
dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
}
dijkstra+heap
struct zt{
int v, d;
bool operator < (const zt b) const
{
return d > b.d;
}
};
priority_queue <zt> q;
void dijkstra(int s)
{
memset(dis, 63, sizeof(dis));
dis[s] = 0;
q.push((zt){s,0});
while(q.size())
{
int x = q.top().v;
q.pop();
if(done[x]) continue;
done[x] = 1;
for(int i = first[x]; i != -1; i = nxt[i])
{
int v = es[i].to;
if(dis[v] > dis[x] + es[i].cost)
{
dis[v] = dis[x] + es[i].cost;
q.push((zt){v,dis[v]});
}
}
}
}
SPFA
queue <int> q;
void spfa(int s)
{
memset(dis,63,sizeof(dis));
dis[s] = 0;
q.push(s);
used[s] = 1;
while(q.size())
{
int x = q.front();
q.pop();
used[x] = 0;
for(int i = first[x]; i != -1; i = nxt[i])
{
int v = es[i].to;
if(dis[v] > dis[x] + es[i].cost)
{
dis[v] = dis[x] + es[i].cost;
if(!used[v])
{
q.push(v);
used[v] = 1;
}
}
}
}
}
SPFA_SLF
deque <int> q;
void spfa(int s)
{
memset(dis,63,sizeof(dis));
dis[s] = 0;
q.push_front(s);
used[s] = 1;
while(q.size())
{
int x = q.front();
q.pop_front();
used[x] = 0;
for(int i = first[x]; i != -1; i = nxt[i])
{
int v = es[i].to;
if(dis[v] > dis[x] + es[i].cost)
{
dis[v] = dis[x] + es[i].cost;
if(!used[v])
{
if(q.empty()) q.push_back(v);
else if(dis[v] <= dis[q.front()]) q.push_front(v);
else q.push_back(v);
used[v] = 1;
}
}
}
}
}