代码随想录:冗余连接
并查集判断是否连通
#include<iostream>
#include<vector>
using namespace std;
vector<int> fa = vector<int>(1001,0);
void init(){
for(int i = 0;i<fa.size();i++){
fa[i]=i;
}
}
int find(int i){
if(fa[i]==i)return i;
else return fa[i] = find(fa[i]);
}
int isSame(int a,int b){
a = find(a);
b = find(b);
return a==b;
}
void join(int a,int b){
a = find(a);
b = find(b);
if(a==b)return;
else fa[a]=b;
}
int main(){
init();
int n;
cin>>n;
int a,b;
while(n--){
cin>>a>>b;
if(isSame(a,b))cout<<a<<' '<<b;
else join(a,b);
}
}