並查集(路徑壓縮)

2021-09-10 12:40:41 字數 959 閱讀 8360

寫一道題的緣故整理來的(儘管最後發現並不需要用到並查集)

記得之前整理過乙個,估計年紀大了,個人感覺這個更清楚一點(不過之前詳解了過程)

用到的是迴圈路徑壓縮,詳見**:

#include#includeusing namespace std;

int pre[120];

int find(int s)//查詢該元素所對的組

return x;

}void join(int a,int b)//將兩個元素塞入同一組

bool isconnected(int a,int b)//觀察兩個元素是否一組

int main()

int m;cin>>m;//輸入條件數

for(int i=0;i>x>>y;//輸入有關係的兩人

if(isconnected(x,y)==true)continue;//判斷是否在同一組

else join(x,y);//否則合為一組

} return 0;

}

牛客補題**(同為並查集)

#include#include#include using namespace std;

const int maxn = 1e5 + 7;

const int mod = 1000000007;

int pre[maxn], sum[maxn];

int find(int x)

int main()

string s,last;

int lastnum;

for(int i=0;i>t>>s;

if(s==last)

else

lastnum=t,last=s;

}for (int i = 1; i <= n; ++i)

return 0;

}

路徑壓縮 並查集路徑壓縮

如何描述乙個複雜的連線關係?如圖,很容易判斷緊鄰的2個人關係,但中間的連線很多很亂,怎麼判斷出兩個人的關係呢?並查集就是一種結構,通過儲存節點以及節點上的標籤,來判斷這兩個節點是否連線在一起。當兩個節點繫結時,可以任選其中乙個節點的標籤,指定另乙個節點。當判斷兩個節點是不是連線時,可以上溯節點的祖宗...

並查集 壓縮路徑

並查集 union findsets 一種簡單的用途廣泛的集合.並查集是若干個不相交集合,能夠實現較快的合併和判斷元素所在集合的操作,應用很多,如其求無向圖的連通分量個數等。最完美的應用當屬 實現kruskar演算法求最小生成樹。並查集的精髓 即它的三種操作,結合實現 模板進行理解 1 make s...

並查集路徑壓縮

使用並查集查詢時,如果查詢次數很多,那麼使用樸素版的查詢方式肯定要超時。比如,有一百萬個元素,每次都從第一百萬個開始找,這樣一次運算就是10 6,如果程式要求查詢個一千萬次,這樣下來就是10 13,肯定要出問題的。這是樸素查詢的 適合資料量不大的情況 int findx int x 下面是採用路徑壓...