有n列戰艦,有兩種操作,第一種,把一列戰艦放在另一列的後面,也就是合併操作,第二種是查詢操作,問兩個戰艦是不是在同一列,如果是的話,就輸出它們之間隔了多少個戰艦,如果不是就輸出-1.
用乙個陣列表示是不是在乙個集合裡,然後用另乙個陣列d表示每一列的大小,還有乙個陣列siz表示邊的權值。
d是到祖先的距離,siz是這列的大小。如果在同一列裡面,就直接輸出d[x]-dy[y]的絕對值減一。
#pragma warning(disable:4996)
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
int fa[30005], d[30005], siz[30005];
int find(int x)
return fa[x];
}int main()
scanf("%d", &t);
while (t--)
else
}return 0;
}
AcWing 238 銀河英雄傳說(帶權並查集)
有乙個劃分為n列的星際戰場,各列依次編號為1,2,n。有n艘戰艦,也依次編號為1,2,n,其中第i號戰艦處於第i列。有t條指令,每條指令格式為以下兩種之一 1 m i j,表示讓第i號戰艦所在列的全部戰艦保持原有順序,接在第j號戰艦所在列的尾部。2 c i j,表示詢問第i號戰艦與第j號戰艦當前是否...
acwing 238 銀河英雄傳說(並查集)
題目位址 維護size和距離的並查集。用d i 表示i到父節點的距離。在合併的時候,a的祖宗到b的祖宗的距離就是b這個集合的size。我們只需要維護兩個祖宗之間的距離就行了。而a那個集合的子節點到b的祖宗節點的距離會在find函式裡面更新。求兩個點在不在同一列就是求是否在同乙個集合,它們之間隔的距離...
AcWing 239 奇偶遊戲 邊帶權並查集
題意 有乙個長度為 n nn 僅由0和1組成的序列。有 m mm 個問題和回答 在區間 li ri l i,r i li r i 內有奇數個或者偶數個 1 11 輸出乙個整數 k kk 表示這個01序列滿足 1 k 1 sim k 1 k 個回答,但不滿足 1 k 1 1 sim k 1 1 k 1...