贪心问题,每次把权重最小的连接成新的树
#include <iostream>
#include <malloc.h>
#include <queue>
#include <string>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <queue>
using namespace std;
priority_queue<int, vector<int>, greater<int> > q;
int t;
int main(int argc, char *argv[])
{
cin >> t;
while( t-- )
{
int n;
cin >> n;
while( !q.empty() )
{
q.pop();
}
for( int i = 1; i <= n; i++ )
{
int tmp;
cin >> tmp;
q.push( tmp );
}
int ans = 0;
for( int cnt = 1; cnt <= n-1; cnt++ )
{
int tmp1,tmp2;
tmp1 = q.top();
q.pop();
tmp2 = q.top();
q.pop();
ans = ans + tmp1 + tmp2;
q.push( tmp1 + tmp2 );
}
cout << ans << endl;
}
return 0;
}