NOI2002T1 銀河英雄傳說 並查集

2021-07-16 13:28:06 字數 643 閱讀 6862

測試位址

題目大意:有30000艘戰艦依次排成30000列,以1~30000編號,有2種操作:1.m i j:將i號戰艦所在的列作為乙個整體接到j號戰艦所在列的尾部。2.c i j:如果i號戰艦和j號戰艦在同一列,詢問它們之間有多少艘戰艦,否則輸出-1。根據詢問給出正確的答案。

做法:用head[i]記錄i號戰艦所在列的最前端的戰艦序號,len[i]記錄以i號戰艦為最前端的列的長度,dist[i]記錄i號戰艦到它所在列的最前端的戰艦的距離。m操作實際上就是合併操作,在合併時注意維護這幾個值。x,y間的戰艦數量就是abs(dist[x]-dist[y])-1。

以下是本人**:

#include #include #include #include using namespace std;

long t,dist[30010]=,head[30010]=,len[30010]=;

char c;

long find(long x)

i=next;

} return r;

}void merge(long a,long b)

int main()

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

}return 0;

}

NOI2002 銀河英雄傳說

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

NOI 2002 銀河英雄傳說

有 n 列戰場,每一列一開始只有乙個戰艦,編號就是對應的戰場編號。有 m 次操作 注意每一列戰場的戰艦都是排成一列的。帶偏移量的並查集。記錄 d x 表示 x 到所在列頭的一段上共有多少個戰艦。記錄 sz x 表示 x 所在的一列有多少個戰艦。為了保證複雜度,我們在做的時候還是要路徑壓縮。但是 d ...

NOI2002 銀河英雄傳說

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