【模板】spfa

int dis_spfa[maxn];
bool vis_spfa[maxn];
queue<int>q_spfa;

void spfa(int x)
{
    mem(dis_spfa, 0x3f);
    mem(vis_spfa, false);
    dis_spfa[x] = 0;
    q_spfa.push(x);
    vis_spfa[x] = true;
    while (!q_spfa.empty())
    {
        int t = q_spfa.front();
        q_spfa.pop();
        vis_spfa[t] = false;
        for (Re int i = head[t]; i != -1; i = e[i].nxt)
        {
            int v = e[i].v;
            int w = e[i].w;
            if (dis_spfa[v] > dis_spfa[t] + w)
            {
                dis_spfa[v] = dis_spfa[t] + w;
                if (!vis_spfa[v])
                {
                    q_spfa.push(v);
                    vis_spfa[v] = true;
                }
            }
        }
    }
}

 

posted on 2019-10-30 17:29  thjkhdf12  阅读(98)  评论(0)    收藏  举报