和彈飛綿羊類似的,那題是維護乙個內向樹,這題是維護若干棵基環內向樹和一棵內向樹
同樣的用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...