小希的迷宮,並查集

2021-10-04 08:19:34 字數 876 閱讀 8305

判斷是否成環:如果新加入一條邊,且邊上的兩個點有共同的祖先,那就成環。

判斷是否為森林:另開乙個陣列記錄某個點是否出現過,遍歷集合陣列,如果該點出現過且為根節點(i=f[i]),那計數器就++。 

看每組資料能否構成無環連通圖。

1。推斷成環:讀入過程中,合併集合的時候,假設,當前讀入的兩個元素屬於同乙個集合。那麼肯定是no。

2。推斷連通:僅僅要推斷根節點數為1就可以。

#includeusing namespace std;

const int maxn=100005;

int vis[maxn],f[maxn];

bool flag=true;

// int find_f(int x)

// return a;

// }

int find_f(int x)

}void merge(int a,int b)else

}int main()

//初始化集合陣列以及標記陣列。

for(int i=1;i<=maxn;i++) f[i]=i,vis[i]=0;

vis[a]=1; vis[b]=1;

merge(a,b);

int c,d;

while(scanf("%d %d",&c,&d))

// //計算集合的數量

// int cnt=0;

// for(int i=1;i<=maxn;i++)

// }

// if(!flag)else

if(!flag)

else

if(cont==1)

else

}} return 0;

}

並查集 小希的迷宮

description 上次gardon的迷宮城堡小希玩了很久 見problem b 現在她也想設計乙個迷宮讓gardon來走。但是她設計迷宮的思路不一樣,首先她認為所有的通道都應該是雙向連通的,就是說如果有乙個通道連通了房間a和b,那麼既可以通過它從房間a走到房間b,也可以通過它從房間b走到房間a...

小希的迷宮(並查集)

problem description 上次gardon的迷宮城堡小希玩了很久 見problem b 現在她也想設計乙個迷宮讓gardon來走。但是她設計迷宮的思路不一樣,首先她認為所有的通道都應該是雙向連通的,就是說如果有乙個通道連通了房間a和b,那麼既可以通過它從房間a走到房間b,也可以通過它從...

小希的迷宮 並查集

problem description 上次gardon的迷宮城堡小希玩了很久 見problem b 現在她也想設計乙個迷宮讓gardon來走。但是她設計迷宮的思路不一樣,首先她認為所有的通道都應該是雙向連通的,就是說如果有乙個通道連通了房間a和b,那麼既可以通過它從房間a走到房間b,也可以通過它從...