1. 程式人生 > >Cities (思維 樹)

Cities (思維 樹)

連結:https://ac.nowcoder.com/acm/contest/123/C
來源:牛客網
 

題目描述

There are  cities in Byteland, and the  city has a value . The cost of building a bidirectional road between two cities is the sum of their values. Please calculate the minimum cost of connecting these cities, which means any two cities can reach each other.

輸入描述:

The first line is an integer 
representing the number of test cases.

For each test case, the first line is an integer ,  representing the number of cities, the
second line are  positive integers ,
representing their values.

輸出描述:

For each test case, output an integer, which is the
minimum cost of connecting these cities.

 

示例1

輸入

複製

2
4
1 2 3 4
1
1

輸出

複製

12
0

 

 

思維題:

題意:將每座城市用公路連線起來,使得城市之間相連,求花費最少的方案(每條路的花費 = 連線兩座城市的和)

思維:用心想想,很明顯這是在構造一個n叉樹,只要確定最小的根節點即可。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>

using namespace std;

const int maxn = 1e5+5;
const int INF = 1e9+7;
int a[maxn];

int main()
{
	int n;
	scanf("%d", &n);
	int m = INF;
	for(int i = 0; i < n; i++) scanf("%d", &a[i]);
	if(n == 1){
		printf("0");
		return 0;
	}
	sort(a, a+n);
	int sum = 0;
	for(int i = 1; i < n; i++) sum += a[i];
	sum += a[0];
	printf("%d\n", sum);
	return 0;
}