Cod sursa(job #2697502)

Utilizator racleta31Andreican Rares racleta31 Data 18 ianuarie 2021 19:23:12
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n , m, cod, a, *c , b;
int sef(int x , int *c)
{
    int tata, temp=x, sef;
    while(temp != c[temp])
    {
        temp = c[temp];
    }
    while(x!=temp)
    {
        tata = c[x];
        c[x] = temp;
        x = tata;
    }
    return x;
}
void unite(int x , int y, int *c)
{
    x = sef(x , c);
    y = sef(y , c);
    c[y] = x;

}

int main()
{
    in>>n>>m;
    c = (int* )calloc(n+1, sizeof(int));
    for(int i=1;i<=n;i++)
    {
        c[i]=i;
    }
    for(int i=1;i<=m;i++)
    {
        in>>cod>>a>>b;
        if(cod == 1)
        {
            if(sef(a, c) != sef(b, c))
            {
                unite(a , b, c);
            }
        }
        else
        {
            if(sef(a, c) == sef(b, c))
            {
                out<<"DA"<<'\n';
            }
            else
            {
                out<<"NU"<<'\n';
            }
        }
    }
    return 0;
}