並查集系列(路徑壓縮)

2021-10-07 07:54:09 字數 880 閱讀 4275

547. 朋友圈

難度中等255

班上有n名學生。其中有些人是朋友,有些則不是。他們的友誼具有是傳遞性。如果已知 a 是 b 的朋友,b 是 c 的朋友,那麼我們可以認為 a 也是 c 的朋友。所謂的朋友圈,是指所有朋友的集合。

給定乙個n * n的矩陣m,表示班級中學生之間的朋友關係。如果m[i][j] = 1,表示已知第 i 個和 j 個學生互為朋友關係,否則為不知道。你必須輸出所有學生中的已知的朋友圈總數。

示例 1:

輸入:[[1,1,0],

[1,1,0],

[0,0,1]]輸出:2

第2個學生自己在乙個朋友圈。所以返回2。

示例 2:

輸入:[[1,1,0],

[1,1,1],

[0,1,1]]輸出:1class solution

public void union(int parent,int i,int j)

public int findcirclenum(int m)

}for(string s:equations)

}return true;

}public int find_root(int parent,int i)

return i;

}public void union(int parent,int i,int j)

}

路徑壓縮 並查集路徑壓縮

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

並查集 壓縮路徑

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

並查集路徑壓縮

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