任意點 並查集

2021-09-29 02:39:35 字數 994 閱讀 1096

傳送門

方法就是在同一行的是乙個集合,在同一列的也是乙個集合,先存再乙個乙個列舉即可。

這裡主要就是要注意,當所有的點都已經全部連線完畢之後,編號為i的點的祖先並不是fa[i],而是fin(i),因為最後還要進行一次預處理,將所有的點都重新整合一遍(防止出現類似於,1,2,3,4,5是乙個集合,那麼可能fa[1]=1,fa[2]=1,fa[3]=2,fa[4]=3,fa[5]=3這種情況)

#include

using

namespace std;

const

int mx=

1e3+9;

int n,fa[mx]

,pos[mx]

;vector<

int> vh[mx]

,vl[mx]

;int

fin(

int u)

void

link

(int u,

int v)

}int

main()

for(

int i=

1; i<=

1000

; i++

)for

(int i=

1; i<=

1000

; i++

)memset

(pos,0,

sizeof

(pos));

int ans=0;

for(

int i=

1; i<=n ; i++

) pos[

fin(i)]=

1;for(

int i=

1; i<=n ; i++)if

( pos[i]

) ans++

;printf

("%d\n"

,ans-1)

;return0;

}

任意點 並查集求聯通塊

任意點時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 平面上有若干個點,從每個點出發,你可以往東南西北任意方向走,直到碰到另乙個點,然後才可以改變方向。請問至少需要加多少個點,使得點對之間互相可以到達。第一行乙個整數...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...

並查集 知識點

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