하프 만 트 리 (우선 대기 열) 합병 과일
첫 줄 에는 데이터 그룹 수 를 나타 내 는 정수 T (T < = 50) 가 포함 되 어 있 습 니 다.각 조 의 데이터 첫 줄 은 하나의 정수 n (2 < = n < = 1000) 을 포함 하고 과일의 퇴적 수 를 나타 낸다.두 번 째 줄 은 n 개의 정수 ai (ai < = 100) 를 포함 하여 모든 과일 더미 의 과일 수 를 나타 낸다.
Output
각 조 의 데 이 터 는 한 줄 로 최소 합병 대 가 를 나타 낸다.
Sample Input
2
4
1 2 3 4
5
3 5 2 1 4
Sample Output
19
33
우 리 는 가끔 하 프 만 나 무 를 만 들 필요 가 없다. 최종 적 인 권한 을 가 진 경로 의 길 이 를 얻 으 면 된다. (예 를 들 어 과일 을 합병 하 는 문 제 는 최소한 의 체력 만 소모 하면 된다 는 것 이다) 우 리 는 하 프 만 의 구 조 를 파악 해 야 한다.
지금 은 n 더미 의 과일 이 있 고, i 더미 에는 ai 개의 과일 이 있다.지금 이 과일 들 을 한 무더기 로 합 쳐 야 하 는데, 매번 합병 하 는 대 가 는 두 무더기 의 총 과일 수 이다.모든 과일 을 합병 하 는 최소한 의 대 가 를 구하 다.사상 을 만 들 면 됩 니 다. 즉, 가장 작은 요 소 를 두 개 반복 해서 선택 하고 하나의 요소 만 남 을 때 까지 합병 하 는 것 입 니 다.
#include
#include
using namespace std;
priority_queue, greater > q;
int main (){
int T;
scanf("%d", &T);
while(T--){
int n;
long long temp, x, y, ans = 0;
while(!q.empty()) q.pop();
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%lld", &temp);
q.push(temp);
}
while(q.size() > 1){ //
x = q.top();
q.pop();
y = q.top();
q.pop();
q.push(x + y);
ans += x + y;
}
printf("%lld
", ans);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
예제 1.15 UVALive-3902 트리의 검색컨베이어 도어 제목 대의: n대의 기계는 하나의 트리 네트워크로 연결되어 잎 노드는 클라이언트이고 다른 노드는 서버이다. 처음에는 한 대의 서버만 하나의 서비스를 제공했지만 k의 거리 내의 클라이언트만 덮어쓸 수 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.