bzoj 2002 彈飛綿羊(LCT)

2021-08-14 07:46:49 字數 612 閱讀 9806

傳送門biu~

最終的圖一定是一棵樹,算乙個點被彈飛需要幾次只需要計算一下這個點到根的路徑上有多少點就可以了,lct。

分塊做法【點這裡】

#include

using

namespace

std;

struct node

inline

void maintain();

}*null=new node,tree[200005];

node :: node()

inline

void node :: maintain()

inline

void rotate(node *o,int d)

inline

void splay(node *o)

}inline

void access(node *o)

}inline

void link(node *x,node *y)

int main()

scanf("%d",&m);

while(m--)

else

}return

0;}

bzoj 2002 彈飛綿羊 LCT

先吐槽一句,這題分塊比lct快是什麼鬼,lct常數是有多大。lct1.8s,分塊總耗時1.6s。主要思路 link i,i a i 彈出去的都連向節點n 1 每次修改cut,link。查詢是 以n 1為根,access x splay x x的子樹大小,就是x點向後彈的節點數。include inc...

bzoj2002 彈飛綿羊

lct裸題 給出一棵樹,有修改及詢問,修改操作為修改乙個節點的父親,詢問乙個節點到根的點數。詢問及修改前只需access一遍即可。include include include include include include define rep i,x,y for int i x i y i de...

BZOJ2002 彈飛綿羊

這題可以用分塊暴力做,這裡給出正解lct的 對於每乙個彈射器i k相當於i的父親,大於n的全部歸到n 1上。這樣對於修改操作就像於換了個父親,我們要記錄下上一次的父親因為在splay中父親可能會改變。對於查詢操作就相當於把n 1mroot到根,因為你新增時會更新,不能確保n 1的位置。而答案就是xs...