首先,可以發現,如果從乙個裝置的目標向這個裝置連一條邊,並且建立虛擬節點\(n+1\),向所有可以彈飛的裝置連邊的話,這肯定構成一顆樹。
理解就行。然後我們就可以在每個節點統計乙個\(size\),並用lct在改變彈力係數時修改這棵樹。則最終答案為:
int ask(int x)
顯然,答案為當前節點的深度。我們可以打通從\(x\)到\(n+1\)的路徑,然後答案即為這個splay的大小。另,最後答案還要減去\(1\),因為有\(n+1\)這個虛擬節點。
**:
#includeusing namespace std;
#define lson t[x].ch[0]
#define rson t[x].ch[1]
int n,m,fa[200100];
struct lctt[200100];
void pushup(int x)
void rev(int x)
void pushdown(int x)
int identify(int x)
void rotate(int x)
void pushall(int x)
void splay(int x)
}void access(int x)
void makeroot(int x)
void split(int x,int y)
int findroot(int x)
void link(int x,int y)
void cut(int x,int y)
void change(int x,int y)
int ask(int x)
int main()
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...