HNOI2010 彈飛綿羊

2022-05-09 11:06:09 字數 1310 閱讀 7296

嘟嘟嘟

挺好的lct題。

所以我決定不拿分塊水過,按正解寫一發。

先新建乙個虛擬節點\(n + 1\),跳到這個點就說明被彈飛了。

1.建樹:

\(i\)向\(min \\)連邊。

2.修改

斷掉\(i\)和\(min \\)的邊,並鏈結\(i\)和\(min \, n + 1 \}\),然後把\(k_i\)賦成\(k_\)。

3.查詢

即樹上\(i\)和\(n + 1\)的鏈長,別忘減\(1\)。

#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define enter puts("")

#define space putchar(' ')

#define mem(a, x) memset(a, x, sizeof(a))

#define in inline

typedef long long ll;

typedef double db;

const int inf = 0x3f3f3f3f;

const db eps = 1e-8;

const int maxn = 2e5 + 5;

inline ll read()

inline void write(ll x)

int n, m, a[maxn];

struct tree

t[maxn];

in void change(int now)

in void pushdown(int now)

}in void pushup(int now)

in bool n_root(int now)

in void rotate(int x)

int st[maxn], top = 0;

in void splay(int x)

}in void access(int x)

}in void make_root(int x)

in int find_root(int x)

in void link(int x, int y)

in void cut(int x, int y)

in int query(int x)

int main()

m = read();

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

}return 0;

}

hnoi2010 彈飛綿羊

題目描述很明確,現在的目標是均攤兩個操作的複雜度 現在我們已知有兩種方法 1.每次用o 1 的時間修改k值,用o n 的時間直接模擬回答詢問 2.每次修改了k值後用o n 的時間更新所有答案,o 1 時間回答 均攤這兩種操作,可以這樣做 由於只可以從前往後跳,所以可以把跳躍路徑壓縮,更新時把壓縮的部...

HNOI 2010 彈飛綿羊

要求維護乙個 n 個節點的森林,實現 m個詢問,其中包括 n 200,000m 100,000 動態樹的入門題。只需要實現ac cess 操作以及維護子樹大小si ze即可。其實我做這道題是為了找找寫動態樹的感覺,發現了不少要注意的細節。總結地說,越是基本的函式就越不能打錯,不然就要花好多的時間去查...

HNOI2010彈飛綿羊

話說我是冒著巨大的風險a這道題的 xc說不讓上其他oj 這題其實很簡單,每個點如果他能往後跳,那就只能跳到唯一的乙個,這顯然是跟森林,用lct就好,維護下size。突然變短 include include define fo i,a,b for int i a i b i define lc c x...