ZJOI2015 幻想鄉戰略遊戲

2022-09-02 09:33:11 字數 2340 閱讀 2865

題意:求乙個樹的帶權重心,帶修改。

現在首位的題解的方法太噁心了,這裡介紹我自己的理解。

假設重心為\(x\),我們有它的代價為:

\[\sum\limits_^\operatorname(i,x)\times val_i

\]其中\(val_i\)表示\(i\)節點的權值。

那如果將重心向\(x\)的某乙個相鄰節點\(y\)移動一格的話,

設\(\operatorname(x,y)\)為連線\(x,y\)的邊的權值,

則對於所有\(y\)一側的節點,距離減少了\(\operatorname(x,y)\);對於所有\(x\)一側的節點,這反而增加了\(\operatorname(x,y)\)。

我們現在假設\(x\)為根。\(sum_i\)表示\(i\)節點的子樹和,

則\(y\)一側節點的貢獻為\(sum_y\times\operatorname(x,y)\);

\(x\)一側節點的貢獻為\(-(sum_x-sum_y)\times\operatorname(x,y)\)

\[2\times sum_y>sum_x

\]顯然,對於每個\(x\),這樣的\(y\)唯一。

如果我們在原樹上這麼搞的話,顯然會tle(想想看如果是條鏈的話)。我們考慮到點分樹上處理。

我們這次令\(sum_i\)表示點分樹上子樹和,而\(dssum_i\)表示:

如果\(i\)有父親(即不是點分樹的根),則為\(\sum\limits_val_j\times\operatorname(j,fa_i)\)。它的意義是到父親的加權距離和。

否則,即它是點分樹的根,則為\(\sum\limits_val_j\times\operatorname(j,i)\)。它的意義是到自己的加權距離和。

我們考慮當前在節點\(x\)。假設我們發現了乙個子節點\(y\)符合\(2\times sum_y>sum_x\),然後怎麼辦呢?

你可能會想著直接跳過去,但抱歉,點分樹上的子樹和不是真實的子樹和,也就是說,這個\(sum_y\)不一定是真實的\(y\)側節點貢獻。

那怎麼辦呢?

我們考慮當\(x\)為點分樹樹根時,顯然,這裡的\(sum_y\)一定是真實的子樹和。因此我們這裡的\(y\)是可信的。

然後,這就是比較驚奇的地方了:

設乙個\(z\),它是\(y\)側節點,同時直接與\(x\)相連。換句話說,\(z\)是原樹上\(x\)在\(y\)側的兒子

我們把\(y\)子樹外側的所有東西,看作乙個點,直接連到\(z\)上

換句話說,當\(y\)為根的時候,它有許多兒子;但其中,\(x\)方向的那個是可以忽略的,因為\(y\)就是從\(x\)過來的,肯定不會再回去了;所以我們就把它連到\(z\)上,當作\(z\)的兒子。

可以參考lct的虛兒子這一概念。

我們令乙個\(imag\)陣列表示虛兒子的\(dssum\)的和。然後,我們可以寫出這樣的求值部分:

ll ask(int x)

return dssum[x];//if there's no proper son, then the answer is x itself

}

則這個東西的複雜度是\(o\big(n\log n\times\max(\text,\log n)\big)\),因為找\(y\)時要統計所有兒子。但是題目最下面有一行:

非常神奇的是,對於所有資料,這棵樹上的點的度數都不超過\(20\)。

點分樹上兒子數量是不大於原樹上兒子數量的,因此複雜度是正確的。

**:

#includeusing namespace std;

typedef long long ll;

int n,m,dep[100100],mn[200100][20],in[100100],lg[200100],tot,fa[100100],fr[100100],admin;

namespace treeedge[200100];

void ae(int u,int v,int w)

bool vis[100100];

void getsz(int x,int fa)

void getroot(int x,int fa)

void modify(int x,int y)

} ll ask(int x)

return dssum[x];//if there's no proper son, then the answer is x itself }}

int main()

ZJOI 2015 幻想鄉戰略遊戲(動態點分治)

首先要明確一點,答案分布是有單調性的。什麼意思呢?假設我們的答案在 u 節點,u,v 之間有一條邊且 u 離答案所在的點更近,那麼 u 節點作為答案一定不比在 v 節點作答案劣。從鏈的角度分析在拓展到樹上會比較好理解這個性質。那麼如果樹是一棵完全二叉樹,就可以 log n 的回答了。從根節點向下跳,...

ZJOI2015 諸神眷顧的幻想鄉

p3256 zjoi2015 day1 諸神眷顧的幻想鄉 時間限制 20000 ms 空間限制 524288 kb 問題描述 幽香是全幻想鄉里最受人歡迎的萌妹子,這天,是幽香的2600歲生日,無數幽香的粉絲到了幽香家門前的太陽花田上來為幽香慶祝生日。粉絲們非常熱情,自發組織表演了一系列節目給幽香看。...

ZJOI2015 諸神眷顧的幻想鄉

一行乙個整數表示答案 7 3 0 2 1 2 1 0 0 1 2 3 4 3 5 4 6 5 7 2 5n 100000,c 10 發現葉子只有10個,那麼可以以每個葉子為根,建trie,然後建廣義字尾自動機 對於每個狀態,代表的字串個數就是max min 1 include include inc...