Cod sursa(job #3258494)

Utilizator stefanvoicaVoica Stefan stefanvoica Data 22 noiembrie 2024 20:20:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout("disjoint.out");

int dim[100002],tata[100002];

int father (int x)
{
    if (x!=tata[x])
        return father(tata[x]);
    return tata[x];
}

void unire (int x,int y)
{
    int tatax=father(x),tatay=father(y);
    if (dim[tatax]<dim[tatay])
    {
        dim[tatay]+=dim[tatax];
        tata[tatax]=tatay;
    }
    else
    {
        dim[tatax]+=dim[tatay];
        tata[tatay]=tatax;
    }
}

int main ()
{
    int tip,n,i,q,x,y;
    fin>>n>>q;
    for (i=1;i<=n;++i)
        dim[i]=1,tata[i]=i;
    for (;q>0;--q)
    {
        fin>>tip>>x>>y;
        if (tip==1)
            unire (x,y);
        else
        {
            if(father(x)!=father(y))
                fout<<"NU";
            else    fout<<"DA";
            fout<<'\n';
        }
    }
    return 0;
}