Cod sursa(job #2797229)

Utilizator HutuMateiHutu Matei HutuMatei Data 9 noiembrie 2021 16:34:47
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>

using namespace std;
const int NMAX=100001;
int t[NMAX],h[NMAX];
ifstream in ("disjoint.in");
ofstream out ("disjoint.out");
int findSet(int x)
{
    while(t[x]!=x)
        x=t[x];
    return x;
}

void UnionSet(int x,int y) //x,y sunt radacini
{
    if(h[x]>h[y])
        t[y]=x;
    else if(h[y]>h[x])
        t[x]=y;
    else
    {
        t[y]=x;
        h[x]++;
    }
}
int main()
{
    int n,j,m,tx,ty,x,y,i;
    in>>n>>m;
    for(j=1;j<=n;j++)
    {
        t[j]=j;
        h[j]=1;
    }
    for(j=1;j<=m;j++)
    {
        in>>i>>x>>y;
        tx=findSet(x);
        ty=findSet(y);
        if(tx!=ty && i==1)
            UnionSet(tx,ty);
        else if(tx!=ty && i==2)
            out<<"NU"<<endl;
        else if(tx==ty && i==2)
            out<<"DA";
    }
    return 0;
}