NOI2002 帶權並查集

2021-09-23 18:52:20 字數 698 閱讀 1452

題意:共有30000個人,編號為1-30000,開始時每個人一列。然後進行兩種操作:m i j表示把第i個人所在的列的隊首加到第j個人所在的列的隊尾。c i j查詢第i個人和第j個人是否在一列,假如在一列詢問i和j間隔著幾個人。

題解:

1.不同於以前的帶權並查集,這個除了fa陣列和d陣列外,加了乙個num陣列,num[i]表示第i列為隊首的佇列有幾個人d[i]表示i到隊首有幾個人

#includeusing namespace std ;

#define n 30005

typedef long long ll ;

int t ;

int fa[n] ;

int d[n] ;//d[i]表示第i個人到隊首有幾個人。

int num[n] ;//num[i]表示以第i個人為隊首有幾個人。

void init()

}int get(int x)

void merge(int x , int y)

void query(int x , int y)

printf("%d\n" , abs(d[x] - d[y]) - 1) ;

}int main()

}

NOI 2002 銀河英雄傳說(帶權並查集)

小聲bb 我覺得帶權並查集比較玄妙 傳送門qaq 很容易想到用並查集來維護 設size表示當前佇列的數量 以i為隊頭的數量 to root表示當前節點到祖宗的距離 則對於每乙個飛船,它到隊頭的距離,就等於它到它祖先的距離加上它祖先到隊頭的距離,而它的祖先到隊頭的距離,也可以變成類似的。可以在getf...

NOI 2002 銀河英雄傳說(帶權並查集)

小聲bb 我覺得帶權並查集比較玄妙 傳送門qaq 很容易想到用並查集來維護 設size表示當前佇列的數量 以i為隊頭的數量 to root表示當前節點到祖宗的距離 則對於每乙個飛船,它到隊頭的距離,就等於它到它祖先的距離加上它祖先到隊頭的距離,而它的祖先到隊頭的距離,也可以變成類似的。可以在getf...

NOI2002銀河英雄傳說 帶權並查集

公元五八 一年,地球居民遷至金牛座 第二行星,在那裡發表銀河聯邦創立宣言,同年改元為宇宙歷元年,並開始向銀河系深處拓展。宇宙歷七九九年,銀河系的兩大軍事集 在巴公尺利恩星域爆發戰爭。泰山壓頂集 宇宙艦隊司令萊因哈特率領十萬餘艘戰艦出征,氣吞山河集 點名將楊威利組織麾下三萬艘戰艦迎敵。楊威利擅長排兵布...