SPLAY,LCT學習筆記(五)

2021-08-28 05:48:33 字數 2692 閱讀 3370

這一篇重點**lct的應用

例:bzoj 2631 tree2(國家集訓隊)

lct模板操作之一,利用splay可以進行區間操作這一性質對維護懶惰標記,注意標記下傳順序和如何下傳

#include #include #include #include #include #include #include #include #define uint unsigned int

#define mode 51061

using namespace std;

uint c[100005][2];

uint v[100005];

uint s[100005];

uint alazy[100005];

uint mlazy[100005];

uint f[100005];

uint ttag[100005];

uint huge[100005];

uint n,m;

char ss[5];

bool berot(uint rt)

return 1;

}void reverse(uint rt)

void update(uint rt)

void mul(uint rt,uint val)

void add(uint rt,uint val)

void pushdown(uint rt)

if(alazy[rt])

if(ttag[rt])

if(c[rt][1])

ttag[rt]=0;

}}void repush(uint rt)

pushdown(rt);

}void rotate(uint rt)

if(!berot(fa))

else

}c[fa][ltyp]=c[rt][ltyp^1];

c[rt][ltyp^1]=fa;

f[c[fa][ltyp]]=fa;

f[fa]=rt;

f[rt]=ffa;

update(fa);

}void splay(uint rt)

else

}rotate(rt);

}update(rt);

}void access(uint rt)

}void makeroot(uint rt)

void split(uint st,uint ed)

void link(uint st,uint ed)

void cut(uint st,uint ed)

inline uint read()

while(ch>='0'&&ch<='9')

return x*f;

}int main()

for(uint i=1;i例:bzoj 3282 luogu 3690 link-cut-tree 模板

模板題,用splay維護即可

注意判斷加邊的合法性

#include #include #include #include #include #include #include #include #define ll long long

using namespace std;

int c[400005][2];

ll s[400005];

int f[400005];

bool ttag[400005];

int v[400005];

int n,m;

bool berot(int rt)

return 1;

}inline int read()

while(ch>='0'&&ch<='9')

return x*f;

}void update(int rt)

void reverse(int rt)

void pushdown(int rt)

}void repush(int rt)

pushdown(rt);

}void rotate(int rt)

if(!berot(fa))

else

}c[fa][ltyp]=c[rt][ltyp^1];

c[rt][ltyp^1]=fa;

f[c[fa][ltyp]]=fa;

f[fa]=rt;

f[rt]=ffa;

update(fa);

}void splay(int rt)

else

}rotate(rt);

}update(rt);

}void access(int rt)

}void makeroot(int rt)

int getroot(int rt)

return rt;

}void link(int st,int ed)

f[st]=ed;

}void cut(int st,int ed)

}void split(int st,int ed)

int main()

while(m--)

else if(typ==1)

else if(typ==2)

else

}return 0;

}

在上面兩個模板應用中,有乙個要點:repush!

在傳遞翻轉標記時,我們要注意一定從上向下傳標記!

SPLAY,LCT學習筆記(六)

這應該暫時是個終結篇了.最後在這裡討論lct的乙個常用操作 維護虛子樹資訊 這也是乙個常用操作 下面我們看一下如何來維護 以下內容 對於乙個點x,如果我們對x進行access操作,那麼他的虛子樹內將包含且僅包含他原樹中子樹內除了他自己以外的所有點,這時如果我們維護了他的虛子樹資訊和,我們把這個資訊與...

SPLAY,LCT學習筆記(三)

前兩篇講述了splay模板操作,這一篇稍微介紹一下splay的實際應用 其實只有一道題,因為本蒟蒻就寫了這乙個 例 bzoj 1014火星人prefix 由於本蒟蒻不會字尾陣列,所以題目中給的提示完全沒看懂 不過並不影響我們做這道題,因為正解好像不用字尾陣列.首先,如果這題沒有插入和修改,那麼我們只...

SPLAY,LCT學習筆記(二)

接下來我們來填一下這個坑 回到我們的主題 noi 2005維修數列 我們剛剛討論了區間翻轉的操作方法,接下來我們來考慮區間插入和區間刪除的方法。所以當我們插入一段區間的時候,我們還是把這個區間的前驅和後繼轉上去,然後把這段區間插到左子樹就可以了 等等,怎麼插?乙個乙個往上扔?這顯然是不合理的。合理的...