代码随想录:冗余连接

并查集判断是否连通

#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);
    }
}
posted @ 2025-02-16 11:48  huigugu  阅读(0)  评论(0编辑  收藏  举报