最小生成树——HDU1233

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>

#define ll long long
using namespace std;
//const int mod=;
#define INF 0x3f3f3f3f
const int maxn=1e6+10;

int n,t;
int mat[105][105];
bool vis[105];
int d[105];

int main(void){
    while(cin >> n && n){
        memset(d,INF,sizeof(d));
        memset(vis,0,sizeof(vis));
        memset(mat,0,sizeof(mat));
        t = n*(n-1)/2;
        int a,b,c;
        while(t--){
            cin >> a >> b >> c;
            mat[a][b] = c;
            mat[b][a] = c;
        }
        int ans = 0;
        d[1] = 0;
        for(int i=1; i<=n; i++){
            int p = -1;
            int mmin = INF;
            for(int j=1; j<=n; j++){
                if(!vis[j] && d[j]<mmin){
                    mmin = d[j];
                    p = j;
                }
            }
            vis[p] = 1;
            ans += mmin;
            for(int j=1; j<=n; j++){
                if(!vis[j] && d[j]>mat[p][j])
                    d[j] = mat[p][j];
            }
        }
        cout << ans << endl;
    }
    return 0;
}

发布了62 篇原创文章 · 获赞 0 · 访问量 1767

猜你喜欢

转载自blog.csdn.net/jhckii/article/details/104304004
今日推荐