[BZOJ 1724] Fence Repair
阿新 • • 發佈:2017-12-08
一道 += har pair prior com == span inline
這大概是BZOJ裏除了A+B Problem最水的一道題了吧
題面:http://www.lydsy.com/JudgeOnline/problem.php?id=1724
這道題其實有一些思路還是可以借鑒的
首先是逆向思維:為了讓計算次數最多的邊必須是最小的邊,因此最小的和倒數第二小的必然在二叉樹的最低端
接下來是遞歸(遞推)的思想,將二者合並後,此問題又變為和合並前完全相同的問題,遞推解決即可
維護自然就用priority_queue
#include <bits/stdc++.h> using namespace std; typedef long long ll; intn; priority_queue<int,vector<int>,greater<int> > q; inline int read() { char ch; int num,f=0; while(!isdigit(ch=getchar())) f|=(num==‘-‘); num=ch-‘0‘; while(isdigit(ch=getchar())) num=num*10+ch-‘0‘; return f?-num:num; } int main() { n=read(); for(int i=1;i<=n;i++) { int x=read(); q.push(x); } if(n==1){cout << q.top();return 0;} ll res=0; while(q.size()>1) { int x=q.top();q.pop(); int y=q.top();q.pop(); res+=(x+y); q.push(x+y); } cout << res;return 0; }
[BZOJ 1724] Fence Repair