zoukankan      html  css  js  c++  java
  • 练习赛2(补题)问题 G: 建设电力系统【最小生成树kruskal模板题】

    问题 G: 建设电力系统

    题目描述

    小明所在的城市由于下暴雪的原因,电力系统严重受损。许多电力线路被破坏,因此许多村庄与主电网失去了联系。政府想尽快重建电力系统,所以,身为程序员的你被赋予了一项任务,就是编程计算重建电力系统的最少花费,重建的电力系统必须保证任意两个村庄之间至少存在一条通路。

    输入

    输入的第一行为一个整数T(1<=T<=50),表示有T组测试数据。
    每组输入第一行是两个正整数N,E(2<=N<=500,N<=E<=N*(N-1)/2),分别表示村庄的个数和原有电力线路的个数。
    接下来的E行,每行包含三个整数A,B,K(0<=A,B<N,0<=K<1000)。A和B分别表示电力线路的起始村庄代号。如果K=0,表示这条线路仍然正常。如果K是一个正整数,表示这条线路需要花费K的代价来重建。
    题目保证输入中没有重边,也没有起始村庄相同的边。

    输出

    对于每组输入,输出重建电力系统所需的最小花费,以此来保证任意两个村庄之间至少存在一条通路。

    样例输入

    1
    3 3
    0 1 5
    0 2 0
    1 2 9

    样例输出

    5


    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    
    #define N 510
    
    int f[N];
    
    struct edge{
    	int u;
    	int v;
    	int w;
    };
    
    
    struct edge e[N*N];
    
    int cmp(struct edge a,struct edge b)
    {
    	return a.w < b.w ;
    }
    
    int find(int v)
    {
    	if(f[v] == v)
    		return v;
    	else
    	{
    		f[v] = find(f[v]);
    		return f[v];
    	}
    }
    int merge(int u,int v)
    {
    	int t1,t2;
    	t1 = find(u);
    	t2 = find(v);
    	if(t1 != t2)
    	{
    		f[t1] = t2;
    		return 1;
    	}
    	return 0;
    }
    
    int main()
    {
    	int t;
    	int n,m;
    	int i;
    	int sum,count;
    	scanf("%d",&t);
    	while( t --)
    	{
    		count = 0;
    		sum = 0;
    		scanf("%d%d",&n,&m);
    		
    		for( i = 0; i < m; i ++)
    			scanf("%d%d%d",&e[i].u ,&e[i].v ,&e[i].w );
    			
    		for( i = 0; i < n; i ++)
    			f[i] = i;
    		sort(e,e+m,cmp);
    		
    		for( i = 0; i < m; i ++)
    		{
    			if(merge(e[i].u ,e[i].v))
    			{ 
    				sum += e[i].w ;
    				count2++;
    			}
    			if(count2 == n-1)
    				break;
    		}
    		printf("%d
    ",sum);
    	}
    	return 0;
    }


  • 相关阅读:
    关于随机数生成
    全文搜索基本原理(倒排索引、搜索结果排序)
    Log-Structured Merge Tree (LSM Tree)
    Spring Cloud组件使用/配置小记
    容错框架之Hystrix小记
    (转)调试程序时设置断点的原理
    字符串匹配算法
    信息论小记
    Java 函数式编程(Lambda表达式)与Stream API
    (转)自动控制的故事
  • 原文地址:https://www.cnblogs.com/hellocheng/p/7350114.html
Copyright © 2011-2022 走看看