Cod sursa(job #3181054)

Utilizator dragos1102Dragos Vieru dragos1102 Data 6 decembrie 2023 13:13:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
using namespace std;
ifstream cin ("disjoint.in");
ofstream cout ("disjoint.out");
int tata[100001],n,m,x,y,rx,ry,tip;
int rad (int x) {
    while(tata[x]>0) {
        x=tata[x];
    }
    return x;
}
int main() {
cin >>n >>m;
for(int i=1;i<=n;i++)
    tata[i]=-1;
for(int i=1;i<=m;i++) {
    cin>>tip >>x >>y;
    if(tip==1) {
        rx=rad(x);
        ry=rad(y);
        if(rx!=ry) {
            if(tata[rx]<tata[ry]) { /// rx devine rad arborelui unificat
                tata[rx]+=tata[ry];
                tata[ry]=rx;
            }
            else {
                tata[ry]+=tata[rx]; /// ry devine rad arborelui unificat
                tata[rx]=ry;
            }
        }
    }
    else {
        rx=rad(x);
        ry=rad(y);
        if(rx==ry)
            cout<<"DA\n";
        else
            cout<<"NU\n";
    }
}
return 0;
}