洛谷 4219 BZOJ 4530 大融合

2022-03-04 09:08:22 字數 1720 閱讀 4677

time limit: 10 sec  memory limit: 256 mb

submit: 990  solved: 604

[submit][status][discuss]

小強要在n個孤立的星球上建立起一套通訊系統。這套通訊系統就是連線n個點的乙個樹。

這個樹的邊是一條一條新增上去的。在某個時刻,一條邊的負載就是它所在的當前能夠

聯通的樹上路過它的簡單路徑的數量。

例如,在上圖中,現在一共有了5條邊。其中,(3,8)這條邊的負載是6,因

為有六條簡單路徑2-3-8,2-3-8-7,3-8,3-8-7,4-3-8,4-3-8-7路過了(3,8)。

現在,你的任務就是隨著邊的新增,動態的回答小強對於某些邊的負載的

詢問。第一行包含兩個整數n,q,表示星球的數量和操作的數量。星球從1開始編號。

接下來的q行,每行是如下兩種格式之一:

a x y 表示在x和y之間連一條邊。保證之前x和y是不聯通的。

q x y 表示詢問(x,y)這條邊上的負載。保證x和y之間有一條邊。

1≤n,q≤100000

對每個查詢操作,輸出被查詢的邊的負載。

8 6a 2 3

a 3 4

a 3 8

a 8 7

a 6 5

q 3 8

6題解

lct維護子樹資訊。

1 #include 2 #include 3 #include 4 #include 5 #include 6

7 inline void read(int &x)819

20const

int n = 102000;21

intn, m, tot, x, y, stk_top;

22int faz[n], siz[n], tag[n], son[n][2

], stk[n], bson[n];

2324

char

opt;

2526 inline int root(int

u)27

3031 inline char getchar(void)32

3839

void swap(int & x, int &y)

4043

44 inline int getson(int

u)45

4849 inline void pushup(int

u)50

5455 inline void pushdown(int

u)56

6364 inline void rotate(int

u)65

7374 inline void splay(int

u)7586}

8788 inline void access(int

u)89

9394 inline void mkrt(int

u)95

9899 inline void split(int a, int

b)100

103104 inline void link(int a, int

b)105

109110 inline void get(int a, int

b)111

115116

intmain()

117126

return0;

127 }

bzoj 4530 大融合(LCT維護子樹資訊)

傳送門biu 用lct維護子樹資訊。lct維護子樹資訊 子樹資訊lct lct維護邊權 邊權lct 知識點講解 xsiz代表節點的虛兒子的size和。rsiz代表該點在splay中的size加上該點的xsiz。每次maintain操作可以更新節點的rsiz值。增加乙個update函式來實現實兒子到虛...

洛谷 3512 bzoj 2096 題解

題外話 bzoj2096現在找不到了。要交還是上洛谷。給定n,k和乙個長度為n的序列,求最長的最大值最小值相差不超過k的連續序列 翻譯的很清楚 輸入 3 9 5 1 3 5 8 6 6 9 10 輸出 4 解釋 5 8 6 6 和 8 6 6 9都是正確的 線段樹 二分長度好像珂以做,但是只能拿80...

洛谷3498 BZOJ2081 Beads 雜湊

題目鏈結 題意 給你乙個字串,對於i 1,n i in 1,n i 1,n 判斷每i個連續字元一組,組成若干個子串,最多能得到多少個不同的子串?最後餘下的不夠i ii的部分忽略。並且我們認為正序和倒序是相同的,例如認為 1,2 和 2,1 相同的。輸出最多得到不同子串的個數 有多少個k能得到這麼多 ...