bzoj3786 星系探索

2022-09-19 08:15:08 字數 1497 閱讀 3134

傳送門

乙個裸的splay維護括號序列的題。

跟彈飛綿羊幾乎一毛一樣,只需把進棧的點權值設為w,出棧點權值設為-w即可。

多了乙個子樹加的操作,就把子樹split出來,打上標記再merge回去就好了。

//

achen

#include#include

#include

#include

#include

#include

#include

#include

const

int n=600007

;typedef

long

long

ll;using

namespace

std;

intn,m,val[n];

char o[10

];template

void read(t &x)

intecnt,fir[n],nx[n],to[n];

void add(int u,int

v) int dfn[2

][n],v[n],f[n],dfs_clock,tot;

void dfs(int

x) int p[n],ch[n][2

];ll sum[n],sumf[n],lz[n];

#define lc ch[x][0]

#define rc ch[x][1]

void update(int

x) void add(int x,int

w) void down(int

x) int build(int

sz)

void rotate(int

x) void splay(int x,int fa=0

) }

int pre(int

x) int nxt(int

x) int split(int x)

void merge(int x,int

y) int

main()

for(int i=1;i<=n;i++) read(val[i]);

dfs(1);

int x=2*n+1,y=2*n+2

; ch[x][

1]=y; p[y]=x;

ch[y][

0]=build(2*n); p[ch[y][0]]=y;

update(y); update(x);

read(m);

while(m--)

else

if(o[0]=='c'

)

else

if(o[0]=='f'

) }

return0;

}/*31

14 5 7

5q 2

f 1 3

q 2c 2 3

q 2*/

view code

BZOJ3786 星系探索

ett搞上,每條邊如果是一條從父到子的邊,那麼設其權值為兒子節點的權值,如果是一條從子到父的邊,那麼設其權值為兒子節點的權值的相反數,我們用乙個splay來維護整棵樹的尤拉序,那麼乙個節點到根的路徑的點權和就等於從根走尤拉序到這個點的邊權和 linkcut操作就相當於區間平移 子樹加就相當於把區間裡...

BZOJ3786 星系探索

一道ett板子題 筆者最開始用fhq treap打的ett,忘記可以沿fafa fa算出它的尤拉序,一直沒調出來,於是就改用splay了。ett的模板。其實我覺得叫它平衡樹板子就可以了 我們可以先通過尤拉序建出一顆平衡樹來,令inx in in x 為點x xx的入尤拉序,out xout outx...

BZOJ 3786 星系探索

bzoj 3786 星系探索 splay維護出棧入棧序 物理學家小c的研究正遇到某個瓶頸。他正在研究的是乙個星系,這個星系中有n個星球,其中有乙個主星球 方便起見我們預設其為1號星球 其餘的所有星球均有且僅有乙個依賴星球。主星球沒有依賴星球。我們定義依賴關係如下 若星球a的依賴星球是b,則有星球a依...