Cod sursa(job #2517944)

Utilizator Rares31100Popa Rares Rares31100 Data 4 ianuarie 2020 15:49:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m;
int unire[100001];
int sizeU[100001];

int rad(int x)
{
    while(x!=unire[x])
        x=unire[x];

    return x;
}

void uneste(int a,int b)
{
    int r1=rad(a);
    int r2=rad(b);

    if(sizeU[r1]<sizeU[r2])
        swap(r1,r2);

    unire[r2]=r1;
    sizeU[r1]+=sizeU[r2];
}

int main()
{
    in>>n>>m;

    for(int i=1;i<=n;i++)
    {
        unire[i]=i;
        sizeU[i]=1;
    }

    int q,a,b;
    for(int k=1;k<=m;k++)
    {
        in>>q>>a>>b;

        if(q==1)
            uneste(a,b);
        else
            if(rad(a)!=rad(b))
                out<<"NU"<<'\n';
            else
                out<<"DA"<<'\n';
    }

    return 0;
}