APIO2016 煙火表演

2021-09-13 08:29:20 字數 889 閱讀 4216

1.x<=l f'(x)=f(x)+w; 

2.l<=x<=l+w f'(x)=f(l)+w-(x-l)

3.l+w<=x<=r+w f'(x)=f(l) 

4.r+w<=x f'(x)=f(l)+(x-r)-w

意思是當前節點考慮到父親的那條邊權為w的邊對於不同x取值的轉移,【l,r】表示最小代價的左右端點,而因為在葉子節點初始化只有乙個點(實際上是兩個中間是長度為0的斜率為0的線)左邊斜率-1右邊+1,再看轉移操作可以畫圖發現實際上是將函式整體右移了w距離。發現這個性質就又能像之前那題通過維護關鍵點**折點)得出答案了,對每個點開可並大根堆,維護的點到r(當前最優解能取到最右邊的),在某節點合併兒子子樹時,發現會多(孩子數-1)這麼多個斜率大於0的,pop掉即可的當前l,r,然後發現整體右移操作其實就相當於刪除l,r然後插入l+w和r+w,最後因為發現f(0)為所有邊邊權和,反推回l處答案即可。

**:

#include#define ll long long

using namespace std;

const int n=6e5+100;

struct heap;

heap(int ls,int rs,ll w):ls(ls),rs(rs),w(w){};

}nd[n*2];

ll sum=0;

int n,m,fa[n],w[n],in[n],rt[n],hnum=0;

vectorson[n];

int mg(int x,int y)

ll top(int x)

void pop(int &x)

void dfs(int pos)

if(pos!=1)

else }

int main()

APIO2016 烟花表演

解題思路 又是一道solpe trick題,觀察出影象變化後不找一些性質還是挺難做的。首先令 dp u i 為節點 u 極其子樹所有葉子到 u 距離為 i 的最少代價,顯然有 dp u i sum min 定義函式 f u x dp u x g u x min 可以得到 f u x sum g v ...

BZOJ4585 Apio2016 煙火表演

烟花表演是最引人注目的節日活動之一。在表演中,所有的烟花必須同時 為了確保安 全,烟花被安置在遠離開關的位置上,通過一些導火索與開關相連。導火索的連線方式形成 一棵樹,烟花是樹葉,如 圖1 所示。火花從開關出發,沿導火索移動。每當火花抵達乙個分 叉點時,它會擴散到與之相連的所有導火索,繼續燃燒。導火...

APIO2016 亞瑟王之宮

暴力 一開始看到這題 暴搜?剪枝?貪心?不知所措,但是想了一想,肯定是要預處理出每個騎士到每個點的最短路的。然後打完第三題有來做這題,發現r和c很小,那麼可以暴力出兩個點對,然後分配騎士到兩個點對去,使得答案最小。dp是肯定可以做的。貪心 現在搜到了點對i和j,假設所有的騎士都去i,每個騎士的貢獻是...