Cod sursa(job #3158440)

Utilizator Theo20067Cismaru Theodor-Alexe Theo20067 Data 18 octombrie 2023 18:54:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout("disjoint.out");
long long T[100002],n,i,x,y,t,m;
long long get_root(long long x)
{
    long long c=x;
    while(T[x]!=0)
        x=T[x];
    long long node=c;
    while(node!=x)
    {
        c=T[node];
        T[node]=x;
        node=c;
    }
    return x;
}
void join(long long x,long long y)
{
    long long root_a=get_root(x);
    long long root_b=get_root(y);
    if(root_a==root_b)
        return ;
    if(T[root_a]>=T[root_b])
        T[root_b]=root_a;
    else
        T[root_a]=root_b;
}
bool query(long long x,long long y){ return get_root(x)==get_root(y);}
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>t>>x>>y;
        if(t==1)
            join(x,y);
        else
            if(query(x,y))
                fout<<"DA"<<"\n";
            else
                fout<<"NU"<<"\n";
    }
    return 0;
}