Cod sursa(job #3197896)

Utilizator brianabucur11Briana Bucur brianabucur11 Data 27 ianuarie 2024 17:15:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;

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

constexpr int NMAX=1e5+1;

vector <int> c[NMAX];
int n, k, id[NMAX];

void init (int n)
{
    for (int i=1; i<=n; i++)
    {
        id[i]=i;
        c[i].push_back(i);
    }
}

int find_cos (int n)
{
    return id[n];
}

void unif (int x, int y)
{
    int i=find_cos(x);
    int j=find_cos(y);
    if (i==j)
        return;
    if (c[i].size()>c[j].size())
    {
        for (auto it:c[j])
        {
            c[i].push_back(it);
            id[it]=i;
        }
    }
    else
    {
        for (auto it:c[i])
        {
            c[j].push_back(it);
            id[it]=j;
        }
    }
}

void task2 (int x, int y)
{
    if (find_cos(x)==find_cos(y))
        fout << "DA" << '\n';
    else
        fout << "NU" << '\n';
}

void solve ()
{
    fin >> n >> k;
    init(n);
    for (int i=1; i<=k; i++)
    {
        int t,x,y;
        fin >> t >> x >> y;
        if (t==1)
            unif(x,y);
        else
            task2(x,y);
    }
}

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