Cod sursa(job #2488743)

Utilizator andreinichitaTirziu Nichita andreinichita Data 7 noiembrie 2019 16:20:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>

using namespace std;
int t[100005],h[100005];
    int findSet(int x)
    {
        while(t[x]!=x)
        x=t[x];
        return x;
    }
    void unionSet(int x,int y)
    {
        if(h[x]>h[y])
        t[y]=x;
        else if (h[x]<h[y])
        t[x]=y;
        else
        {
            t[y]=x;
            h[x]++;
        }
    }
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int main() {
    int n,m,i,x,y,tx,ty,a;
    in>>n>>m;
    for(i=1;i<=n;i++)
    {
        h[i]=1;
        t[i]=i;
    }
    for(i=1;i<=m;i++)
    {
        in>>a>>x>>y;
        tx=findSet(x);
        ty=findSet(y);
        if(a==1){
        if(tx!=ty)
        unionSet(tx,ty);
        }
        else
        {
            if(tx==ty)
            out<<"DA\n";
            else
            out<<"NU\n";
        }
    }
    
}