首页 > 其他分享 >最小生成树

最小生成树

时间:2024-02-05 18:24:01浏览次数:17  
标签:return int res mincost 最小 生成 cost find

记录
18:22 2024-2-1

目录

1.最小生成树

1.Prim

类似dijkstra,优化可以用最小堆来维护权值最小边

点击查看代码
const int INF = 0x3f3f3f3f;

int cost[MAX_V][MAX_V]; // cost[u][v]边e(u,v)的权重 不存在设为INF
int mincost[MAX_V];
bool used[MAX_V];
int V;

int prim() {
    for(int i = 0; i < V; i++) {
        mincost[i] = INF;
        used[i] = false;
    }

    mincost[0] = 0;
    int res = 0;

    while (true) {
        int v = -1;
        for(int u = 0; u < V; u++) {
            if(!used[u] && (v == -1 || mincost[u] < mincost[v])) v = u;
        }

        if(v == -1) break;
        used[v] = true;
        res += mincost[v];

        for(int u = 0; u < V; u++) {
            mincost[u] = min(mincost[u], mincost[v] + cost[v][u]);
        }
    }
    return res;
}

2.Kruskal

点击查看代码
void init(int n) {
    for(int i = 0; i < n; i++) {
        par[i] = i;
        ran[i] = 0;
    }
}

int find(int x) {
    if(par[x] == x) {
        return x;
    } else {
        return par[x] = find(par[x]);
    }
}

void unite(int x, int y) {
    x = find(x);
    y = find(y);

    if(x == y) return;

    if(ran[x] < ran[y]) {
        par[x] = y;
    } else {
        par[y] = x;
        if(ran[x] == ran[y]) ran[x]++;
    }
}

bool same(int x, int y) {
    return find(x) == find(y);
}

struct edge {int u, v, cost;};

bool comp(const edge &e1, const edge &e2) {
    return e1.cost < e2.cost;
}

edge es[MAX_E];
int V, E;

int kruskal() {
    sort(es, es + E, comp); // 按照edge.cost的顺序 从小到大
    init(V);        //初始化 并查集
    int res = 0;
    for(int i = 0; i < E; i++) {
        edge e = es[i];
        if(!same(e.u, e.v)) {
            unite(e.u, e.v);
            res += e.cost;
        }
    }
    return res;
}

标签:return,int,res,mincost,最小,生成,cost,find
From: https://www.cnblogs.com/57one/p/18002201

相关文章

  • sql server生成时间序列
    DECLARE@startDateDATE='2024-01-01';--定义结束日期DECLARE@endDateDATE=DATEADD(DAY,365,@startDate)--生成日期序列;WITHDateSequenceAS(SELECT@startDateAS[Date],1AS[DayNumber]UNIONALLSELECTDATEADD(DAY,1,[Date]......
  • 最小生成树
    【最小生成树是什么】在一张图\(G\)(设\(n\)个结点)中,选取\(n-1\)条边,用这些边把结点之间连通。那么这\(n-1\)条边和原来的结点所构成的图\(S\),就叫做\(G\)的生成树。最小生成树,就是希望\(S\)中边权的和最小。而求最小生成树,有两种比较常用的方法:Kruskal和Prim。......
  • 在我的VS2019中重新配置2017项目生成的google test 项目
    原来的项目是其他版本的VS配置的,自己下载下来时候,本机也没有装GoogleTest所以用不起。如果重建项目在一个个引入工程代码太麻烦(文件多),所以我就想着有没有什么办法快捷配置,不用重建工程以下是我的一个配置方法,供大家交流学习:1.首先你本机要安装上GoogleTest,安装方法自查;2.如......
  • c++生成随机数
    产生随机数的叫随机数生发器生成随机数constunsignedzseed=time(0);voidsolve(){ //随机数生发器 mt19937_64m{zseed}; //种子 rep(i,1,5) cout<<m()<<endl; return;}重排序列constunsignedzseed=time(0);mt19937_64zgen{zseed};voidsolve(){ ve......
  • 踩坑了,MySQL数据库生成大量奇怪的大文件
    作者:田逸(formyz)一大早就收到某个数据库服务器磁盘满的报警信息,其中数据盘使用率超过90%,如下图所示。这是一台刚上线不久的MySQL从库服务器,数据盘的总容量是300G。先登录系统,查看主从同步是否正常,幸运的是主从同步正常;再看看磁盘空间的使用情况,执行的命令及输出如下。df-h[root@MyS......
  • vue的scoped中的class data-v-xxx生成规则为什么是按照文件的路径?
    Vue.js中,当在单文件组件(.vue文件)的<style>标签上使用scoped属性时,VueLoader会为组件中的CSS添加一个唯一的属性选择器,以确保样式只作用于当前组件内的元素。这个独特的属性通常格式为data-v-xxx,其中xxx是一个根据文件内容和路径生成的哈希值。生成规则基于文件内容和......
  • flex布局 自适应宽高 缩放到内容高度时不再进行缩放, 需求设置最小高度超出滚动条,并隐
    在需要滚动的元素内部添加一层div,并添加样式:position:absolute;父级样式添加 position:relative;即可<divclassName="pcCommon_left_top">          <divstyle={{position:'absolute',width:'calc(100%-72rem)'}}>     ......
  • 最小覆盖子串
    问题描述:给定一个字符串S和一个字符串T,请在S中找出包含T所有字母的最小子串。示例:输入:S="ADOBECODEBANC",T="ABC"输出:"BANC"说明:如果S中不存这样的子串,则返回空字符串""。如果S中存在这样的子串,我们保证它是唯一的答案。/***思路:*我们可以考......
  • 长度最小的子数组
    问题描述:给定一个含有n个正整数的数组和一个正整数s,找出该数组中满足其和≥s的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回0。示例:输入:s=7,nums=[2,3,1,2,4,3]输出:2解释:子数组[4,3]是该条件下的长度最小的连续子数组。进阶:如果你......
  • 【SSL协议】生成SSL证书
    目录生成SSL证书keytool相关指令说明服务器端SSL证书签发第一步:创建几个目录来保存证书第二步:生成server.keystore.jks文件(生成服务端的keystore文件)第三步:生成CA认证证书(ca-cert、ca-key)第四步:通过CA证书创建一个客户端信任证书(client.truststore.jks)第五步:通过CA证书创建一个服......