Cod sursa(job #3328811)

Utilizator apoputoaievladVlad Cristian Apoputoaie apoputoaievlad Data 10 decembrie 2025 15:33:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 100005;
int n, m;
int t[NMAX];
vector <int> comp[NMAX];

int root(int nod)
{
    return t[nod];
}

void add(int x, int y)
{
    for(int nod : comp[x])
    {
        comp[y].push_back(nod);
        t[nod]=y;
    }
    comp[x].clear();
}

bool check(int x, int y)
{
    return root(x)==root(y);
}

void unite(int x, int y)
{
    x = root(x);
    y = root(y);
    if(x!=y)
    {
        if(comp[x].size() > comp[y].size())
            swap (x,y);
        add(x, y);
    }
}

int main()
{
    int task,x,y;
    fin>>n>>m;
    for(int i = 1; i <= n; i++)
    {
        t[i]=i;
        comp[i].push_back(i);
    }
    for(int i = 1; i <= m; i++)
    {
        fin >> task >> x >> y;
        if (task == 1)
        {
            unite(x,y);
        }
        else
        {
            fout << (check(x,y) ? "DA" : "NU") <<"\n";
        }
    }
    return 0;
}