有環的情況生成並查集

2021-09-11 19:56:37 字數 953 閱讀 3345

並查集最基本的查詢和合併就不多講了,直接看函式吧。

合併過程中如果出現環,如5->6->7->5,那麼在找最終老大時會出現死迴圈,邊輸入每個節點的老大資訊邊合併可以有效的處理這種情況,具體解析看**注釋。

#include#include#include#includeusing namespace std;

const int n=100005;

int a[n];

int fa[n];//存各自的老大

long long c[n];

vectors;

int n,m;

void init()

int find(int x)

這段捨棄不知為啥不行*/

r = fa[r];

} //壓縮

int i = x, j;

while (fa[i] != r)

return r;

}void mix(int x, int y)//讓y成為x的直接老大

/*樣例

8 21 2 3 4 1 2 3 12

2 3 3 3 6 7 5 8

*/void solve()

//顯示連通塊資訊 上面find更新後才是最終的 3 3 3 3 7 7 7 8

/*for(int i=1;i<=n;i++)

cout<());

//輸出連通塊的流量排名12 10 6

/*for(int i=0;icout

long long ans=0;

int j=n;

for(int i=0;iprintf("%lld",ans);

} int main()

solve();

}

return 0;

}

並查集判環(裸

題目大意 有一些化合物,每個化合物都由兩種元素組成的 每個元素用乙個大寫字母表示 你是乙個裝箱的工人,從實驗員那裡按照順序依次把一些簡單化合物裝到車上。但這裡存在乙個安全隱患 如果車上存在k個簡單的化合物,正好包含k中元素,那麼它們將組成乙個易爆的混合物。為了安全起見,每當你拿到乙個化合物時,如果它...

並查集 判斷環,樹

hdu 1272 小希的迷宮 include include include include include include include include include include include include include define inf 0x3f3f3f3f using nam...

發現環 藍橋(並查集 dfs)

試題 歷屆試題 發現環 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 小明的實驗室有n臺電腦,編號1 n。原本這n臺電腦之間有n 1條資料鏈結相連,恰好構成乙個樹形網路。在樹形網路上,任意兩台電腦之間有唯一的路徑相連。不過在最近一次維護網路時,管理員誤操作使得某兩台電腦之間增加...