• hihoCoder 1098


    题目大意:n 个城市由 m 条边连接,每条边有权值,求将所有城市连接起来时的最小权值和。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int n,m;
    int u[1000010],v[1000010],w[1000010],f[100010],r[1000010];
    
    int cmp(const int x,const int y){
    	return w[x] < w[y]; // zhuyi < 
    }
    
    int find(int x){
    	return x == f[x] ? x : f[x] = find(f[x]);
    }
    
    int main(){
    	int i,j,ans;
    	while(scanf("%d%d",&n,&m) == 2){
    		ans = 0 ;
    		for(i=0;i<m;i++)
    			scanf("%d%d%d",&u[i],&v[i],&w[i]);
    		for(i=0;i<m;i++)
    			r[i] = i;
    		for(i=0;i<n;i++)
    			f[i] = i;
    		sort(r,r+m,cmp); 
    		int cnt = 0;
    		for(i=0;i<m && cnt <= n;i++){
    			int x = find(u[r[i]]);
    			int y = find(v[r[i]]);
    			if(x == y)
    				continue;
    			f[x] = y;
    			ans += w[r[i]];
    			cnt ++ ;
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Mina之session
    进程管理
    Mina之polling
    用户和组ID
    Mina之service
    同步化、同步及异步操作
    高级进程管理
    一般文件I/O用法建议
    有一个图像搜索引擎
    图像处理和识别和机器学习源码
  • 原文地址:https://www.cnblogs.com/jxgapyw/p/4857050.html
Copyright © 2020-2023  润新知