!-- Loading 底层遮罩 -->

最小生成树

Prim     O(mlogm)

    memset(dis, 80, sizeof(dis));
    q.push({ 1,0 });
    dis[1] = 0;
    while (!q.empty())
    {
        int u = q.top().s;
        q.pop();
        if (vis[u])continue;
        vis[u] = true, ++num, ans += dis[u];
        for (int i = hd[u]; i; i = g[i].nxt)
        {
            int v = g[i].to, w = g[i].val;
            if (dis[v] > w)
            {
                dis[v] = w;
                q.push({ v,dis[v] });
            }
        }
    }

Kruskal     O(mlogm)

sort(g + 1, g + m + 1);
    for (int i = 1; i <= m; i++)
    {
        int fu = find(g[i].u);
        int fv = find(g[i].v);
        if (fu == fv)continue;
        ans += g[i].val;
        fa[fv] = fu;
        cnt++;
    }

 

posted @ 2022-05-23 22:52  Thinker-X  阅读(18)  评论(0编辑  收藏  举报