记录编号 551261 评测结果 AAAAAAAAAA
题目名称 扑克游戏 最终得分 100
用户昵称 Gravatar瑆の時間~無盡輪迴·林蔭 是否通过 通过
代码语言 C++ 运行时间 0.066 s
提交时间 2020-05-10 22:06:38 内存使用 14.27 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
vector<int> b[20001];
int val[20001];
int If[20001];
int n,x,tot=0,ans=0;
priority_queue<pair<int,int> > q;
void DFS(int x,int dep)
{
	if(If[x]!=0)
	{
		//cout<<If[x]<<' '<<x<<' '<<dep<<endl;
		ans+=If[x]*dep;
		return;
	}
	for(int i=0;i<b[x].size();i++)
	{
		int to=b[x][i];
		DFS(to,dep+1);
	}
}
int main()
{
	freopen("poker.in","r",stdin);
	freopen("poker.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&x);
		q.push(make_pair(-x,++tot));
		If[tot]=x;
	}
	while(q.size()>1)
	{
		int A=q.top().second;
		int va=q.top().first*-1;
		q.pop();
		int B=q.top().second;
		int vb=q.top().first*-1;
		q.pop();
		b[++tot].push_back(A);
		b[tot].push_back(B);
		q.push(make_pair(-1*(va+vb),tot));
	}
	int root=q.top().second;
	DFS(root,0);
	printf("%d",ans);
	return 0;
}