【模板】dijstkra

北城以北 提交于 2019-12-01 22:35:37
typedef struct
{
    bool operator ()(const intpair& a, intpair& b)const
    {
        return a.second > b.second;
    }
}cmp;

int dis[maxn];
bool vis[maxn];
priority_queue<intpair, vector<intpair>, cmp>q;

void dijstkra(int x)
{
    mem(dis, 0x3f);
    dis[x] = 0;
    q.push(intpair(x, dis[x]));
    while (!q.empty)
    {
        intpair t = q.top();
        q.pop();
        if (vis[t.first]) continue;
        vis[t.first] = true;
        for (int i = head[x]; i != -1; i = e[i].nxt)
        {
            int u = e[i].u;
            int w = e[i].w;
            if (!vis[u] && dis[u] > t.first + w)
            {
                dis[u] = t.first + w;
                q.push(intpair(u, dis[u]));
            }
        }
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!