洛谷 P1196 銀河英雄傳說

2022-05-21 20:42:17 字數 412 閱讀 9599

p1196 銀河英雄傳說

加權並查集,簡介見加權並查集,具體方法見**及注釋

//p1196 銀河英雄傳說

#includeint fa[30010];

int r[30010];//r[i]表示第i號戰艦在其父親之後的第r[i]個位置

int r2[30010];//r2[i]表示以第i號戰艦為隊首的佇列有r2[i]輛戰艦

//本來只想到了記錄戰艦i後面的戰艦數量,但是操作量太大,這裡是受到其他人啟發了

int t;

int getans(int x,int y)//計算x與y之間戰艦數量,"之間"指的就是不包括x和y本身

{ if(x==y)

return 0;

if(x>y)

return x-y-1;

if(x

洛谷P1196 銀河英雄傳說

大意 你有30000個佇列,第i個佇列中只有i 有t個操作,1,把某個佇列頭接到另乙個佇列尾。2,問兩個元素之間的距離。本題主要有三種解法。帶權並查集。具體來說就是,並查集維護當前集合的大小,這個點距離代表元 隊首 的邊數。然後把合併和路徑壓縮魔改一下。詢問的時候就直接取距離之差。1 include...

洛谷P1196 銀河英雄傳說

題目大意 有30000個船,第i個船在第i列,兩個操作,m 把第i列的船整體拼到第j列船後,c 求第i和第j個船之間的船的個數 題解 可以想到用並查集,在基礎的並查集上增加路徑,用num陣列存第i個船到隊首的距離,用len存這一列的船的個數。問題主要在路徑壓縮上維護num陣列上。可以在find的過程...

洛谷P1196 銀河英雄傳說

題目 題意 有好多好多艦隊排成一排。m i,j表示將編號i艦隊所在的列排到編號j艦隊所在列的後面。c i,j表示查詢編號i艦隊和編號j艦隊如果在一列,中間間隔了多少只艦,如果不在同一列輸出 1 思路 很自然能想到用乙個陣列可以表示某乙個艦排在這一列的第幾個 當要查詢的時候只需要用並查集查一下隊首相不...