Cod sursa(job #2500563)

Utilizator mariamirabella2Bucur-Sabau Maria-Mirabela mariamirabella2 Data 28 noiembrie 2019 10:48:36
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>

using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

int n,m,t,x,y,tata[100005],cnt[100005];
int findtata(int nod){
    while(nod!=tata[nod]){
        nod=tata[nod];
    }
    return nod;
}
void unire(int nod1,int nod2){
    if(cnt[nod1]==cnt[nod2]){
        cnt[nod1]++;
    }
    if(cnt[nod1]<cnt[nod2])
         tata[findtata(nod1)]=tata[findtata(nod2)];
    else
         tata[findtata(nod2)]=tata[findtata(nod1)];

}
bool samegrup(int nod1,int nod2){
    if(findtata(nod1)==findtata(nod2))
       return 1;
    return 0;
}

int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        tata[i]=i;
        cnt[i]=1;
    }
    for(int i=1;i<=m;i++){
        cin>>t>>x>>y;
        if(t==1)
            unire(x,y);
        else{
            if(samegrup(x,y)==1){
                   cout<<"DA"<<'\n';
            }
            else
                cout<<"NU"<<'\n';
        }
    }
    return 0;
}