最小生成树:Prim,kruskal

prim:以点为衡量

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

//prim
int main(){
    int v,e;
    cin>>v>>e;
    vector<vector<int>>graph(v+1,vector<int>(v+1,10001));

    while(e--){
        int v1,v2,val;
        cin>>v1>>v2>>val;
        graph[v1][v2]=val;
        graph[v2][v1]=val;
    }

    vector<int>minDist(v+1,10001);
    vector<bool>inTree(v+1,false);
    
    for(int i=0;i<v;i++){//只需要n-1次
    int cur=-1;
    int minval=INT_MAX; //在里面,每次都从max开始

    for(int j=1;j<=v;j++){
    if(!inTree[j]&&minval>minDist[j]){
        cur=j;
        minval=minDist[j];
    }//选出最小的一个
    }

    inTree[cur]=1;

    for(int k=1;k<=v;k++){
        if(!inTree[k]&&minDist[k]>graph[k][cur]){
            minDist[k]=graph[k][cur];
        }
    }

    }
    int res=0;
    for(int i=2;i<=v;i++){
        res+=minDist[i];
    }
    cout<<res<<endl;

}

kruskal:维护边的集合

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

struct Edges{
    int l,r,val;
};

vector<int>father(10001,0);

void init(){
    for(int i=1;i<10001;i++)father[i]=i;
}

int find(int u){
    if(u==father[u])return u;
    else return father[u]=find(father[u]);
}

void join(int u,int v){
    u=find(u);
    v=find(v);
    if(u==v)return;
    father[v]=u;
}

bool issame(int u,int v){
    u=find(u);
    v=find(v);
    if(u==v)return true;
    else return false;
}

bool cmp(Edges& a,Edges& b){
    return a.val<b.val;
}

int main(){
    init();//怎么又忘了!!!!!!!!输出都是0!!!!!
    int v,e;
    cin>>v>>e;
    vector<Edges>edges;
    while(e--){
        int l,r,val;
        cin>>l>>r>>val;
        edges.push_back({l,r,val});
    }
    sort(edges.begin(),edges.end(),cmp);
    int res=0;
    for(Edges edg:edges){
        int v1=edg.l;
        int v2=edg.r;
        if(!issame(v1,v2)){
            res+=edg.val;
            join(v1,v2);
        }
    }
cout<<res<<endl;
}
相关推荐
学习智者2 小时前
《玄》IDE v3.6.3重磅发布:全功能修复与性能飞跃
开发语言·c++·ide·算法·中文语言 玄
Jasmine_llq2 小时前
《P10263 [GESP202403 八级] 公倍数问题》
算法·数论·快速 io 优化·埃氏筛(倍数枚举)·线性遍历求和
2402_882893862 小时前
C++异常:从概念到实践的一篇博客
c++·异常
橘子汽水1682 小时前
Leetcode 322 279 零钱兑换,完全平方数
算法·leetcode
kevin_kang3 小时前
第01章 VoiceAgent 的总体架构与完整流程
算法
m0_734571763 小时前
深入理解C++ 析构函数<二>析构顺序
开发语言·c++
Lintongzg3 小时前
KV-Cache 的显存账本:长上下文、并发与量化剪枝的取舍
算法·机器学习·剪枝
小孩玩什么3 小时前
深入理解字符串匹配算法:BF算法,KMP算法
java·c语言·开发语言·数据结构·c++·算法
jsjzsl23 小时前
独立自由度框架下核聚变的本体论本质与商业化技术新路径
人工智能·python·算法