• 最小生成树 prim算法


    n表示点的个数,m表示边的条数,在依次输入边的起点终点与权值,输出总花费。

    可用优先队列优化,需要的话请留言。

    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    bool book[100];
    const int inf = 2100000000;
    int main()
    {
        vector<int>u[100];
        vector<int>w[100];
    
        int n,m;
        cin>>n>>m;
        int x,y,s;
        for(int i=0;i<m;i++){
            cin>>x>>y>>s;
            u[y].push_back(x);
            u[x].push_back(y);
            w[x].push_back(s);
            w[y].push_back(s);
        }
    
        int dis[100];
        fill(dis,dis+99,inf);
    
        int num=0;
        dis[1]=0;
        int minn=inf;
        int t,ans=0;
        while(num!=n){
            minn=inf;
            for(int i=1;i<=n;i++){
                if(dis[i]<minn&&!book[i]){minn=dis[i];t=i;}
            }
            ans+=dis[t];num++;book[t]=true;
            for(int i=0;i<u[t].size();i++){
                if(w[t][i]<dis[u[t][i]]){
                    dis[u[t][i]]=w[t][i];
                }
            }
        }
        cout<<ans<<endl;
    }
  • 相关阅读:
    hh
    SDUT 3923 打字
    最短路
    阶乘后面0的个数(51Nod 1003)
    大数加法
    Biorhythms(中国剩余定理)
    usaco-5.1-theme-passed
    usaco-5.1-starry-passed
    usaco-5.1-fc-passed
    usaco-4.4-frameup-passed
  • 原文地址:https://www.cnblogs.com/ZGQblogs/p/9076269.html
Copyright © 2020-2023  润新知