Cod sursa(job #2772210)

Utilizator Cristi_PraliaPralia Alexandru Cristian Cristi_Pralia Data 31 august 2021 12:28:22
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
#define MAXN 100001
vector <int> g[MAXN];
int daddy[MAXN];
int myfind(int x){
    vector <int> v;
    while(daddy[x]!=x){
        v.push_back(x);
        x=daddy[x];
    }
    for(int i=0; i<v.size(); i++)
        daddy[v[i]]=x;
    return x;
}
void myunion(int x, int y){
    daddy[myfind(y)]=myfind(x);
}
int main()
{
    int n,m,c,a,b;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        daddy[i]=i;
    for(int i=1; i<=m; i++){
        cin>>c>>a>>b;
        if(c==1){
            myunion(a, b);
        }
        if(c==2){
            if(myfind(a)==myfind(b))
                cout<<"DA"<<endl;
            else
                cout<<"NU"<<endl;
//            cout<<daddy[a]<<" "<<daddy[b];
        }
    }
    return 0;
}