傳送門
寫題一時wa了時間不多了計畫還沒完成先放下去寫道水題好像是正確的選擇。
對每個點記錄它到當前代表元的距離,初始都為0(到自己)。
合併時之前代表元的距離就等於它要合併的那個集合的size。路徑壓縮時先加上父親到代表元的距離,再把父親換成代表元。
//twenty#include#include#include#include#include#include#include#includeconst int maxn=30005;
using namespace std;
typedef long long ll;
int n,fa[maxn],d[maxn],sz[maxn],x,y,u,v,top;
char op[5];
void read(int &ret)
int find(int x)
else
}void init()
} else }}
int main()
洛谷P1196 銀河英雄傳說
大意 你有30000個佇列,第i個佇列中只有i 有t個操作,1,把某個佇列頭接到另乙個佇列尾。2,問兩個元素之間的距離。本題主要有三種解法。帶權並查集。具體來說就是,並查集維護當前集合的大小,這個點距離代表元 隊首 的邊數。然後把合併和路徑壓縮魔改一下。詢問的時候就直接取距離之差。1 include...
洛谷 P1196 銀河英雄傳說
p1196 銀河英雄傳說 加權並查集,簡介見加權並查集,具體方法見 及注釋 p1196 銀河英雄傳說 includeint fa 30010 int r 30010 r i 表示第i號戰艦在其父親之後的第r i 個位置 int r2 30010 r2 i 表示以第i號戰艦為隊首的佇列有r2 i 輛戰...
洛谷P1196 銀河英雄傳說
題目大意 有30000個船,第i個船在第i列,兩個操作,m 把第i列的船整體拼到第j列船後,c 求第i和第j個船之間的船的個數 題解 可以想到用並查集,在基礎的並查集上增加路徑,用num陣列存第i個船到隊首的距離,用len存這一列的船的個數。問題主要在路徑壓縮上維護num陣列上。可以在find的過程...