BZOJ4764 彈飛大爺

2021-08-19 18:29:48 字數 1375 閱讀 7156

和彈飛綿羊類似的,那題是維護乙個內向樹,這題是維護若干棵基環內向樹和一棵內向樹

同樣的用lct維護就好了

內向樹可以直接維護,對於基環內向樹,隨便找環上一點x做根,記錄他指向哪個點to[x]

對於cut操作,不在環上可以直接斷,否則斷了之後要把x和to[x]連起來

對於link操作,如果不成環同樣可以直接連,否則直接把這個link的點當作這棵基環內向樹的根就行了

詢問的話,如果不在n+1那棵內向樹上直接輸出-1,否則答案就是他的層數

code:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define pb push_back

using

namespace

std;

inline

void read(int &x)

const

int maxn = 210000;

int n,m;

int a[maxn];

struct link_cut_tree

void pushup(const

int x)

bool isrt(const

int x)

void rot(int x)

void splay(int x)

pushup(x);

}void access(int x)

}int go(int x,int dir)

int findrt(int x)

bool connected(int x,int y)

void link(int x,int y)

void cut(int x)

int q(int x)

bool incir(int x)

}lct;

int main()

lct.init();

for(int i=1;i<=n;i++)

for(int i=1;i<=m;i++)

else

if(lct.findrt(c)!=x) lct.link(c,x);

a[x]=c; }}

return

0;}

bzoj4764 彈飛大爺

傳送門 你們搞的這個題目啊,exciting!lct裸題嘛。記得特判一下根節點所連出的邊是否會成環就行了,還有刪邊的時候特判一下是否需要把這條邊加回去。幾天不寫lct,結果一寫就寫出各種腦殘錯誤,我怎麼這麼菜,233 1 include2 include3 include4 define isroo...

BZOJ 4764 彈飛大爺

time limit 30 sec memory limit 256 mb submit 39 solved 24 submit status discuss 自從wc退役以來,大爺是越來越懶惰了。為了幫助他活動筋骨,也是受到了彈飛綿羊一題的啟發,機房的小夥伴們 決定齊心合力構造乙個下面這樣的序列。...

BZOJ 4764 彈飛大爺 LCT

思路並不難,主要是細節需要注意一下.在 lct 中,刪邊要寫成 f lson 0,lson 0 因為刪 x y 時 y 不一定是左兒子,y 只是 x 的前驅 然後 f lson lson 0 這個寫法在一些編譯器上是錯誤的 就是你會發現 f lson 中這個 lson 會變成 0 因為那個錯誤 tl...