Cod sursa(job #2505194)

Utilizator lucianul31Moisii Lucian lucianul31 Data 6 decembrie 2019 14:11:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX=1e5 + 10;
int T[NMAX], Rang[NMAX], n, m;

inline int Root(int x)
{
    if(T[x]==0)
        return x;
    T[x]=Root(T[x]);
    return T[x];
}

void Unite(int x, int y)
{
    int rx=Root(x), ry=Root(y);
    if(rx!=ry)
    {
        if(Rang[rx]<Rang[ry])
            T[rx]=ry;
        else
        {
            T[ry]=rx;
            if(Rang[rx]==Rang[ry])
                Rang[rx]++;
        }
    }
}

void Read_SOLVE()
{
    int p, x, y;
    in>>n>>m;
    for(int i=1; i<=m; i++)
    {
        in>>p>>x>>y;
        if(p==1)
            Unite(x, y);
        else
        {
            if(Root(x)==Root(y))
                out<<"DA\n";
            else
                out<<"NU\n";
        }
    }
}

int main()
{
    Read_SOLVE();
    return 0;
}