判斷是否成環:如果新加入一條邊,且邊上的兩個點有共同的祖先,那就成環。
判斷是否為森林:另開乙個陣列記錄某個點是否出現過,遍歷集合陣列,如果該點出現過且為根節點(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,也可以通過它從...