Cod sursa(job #3318196)

Utilizator RosaSofianRosa Sofian RosaSofian Data 27 octombrie 2025 14:43:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
using namespace std;

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

const int dim= 1e5+ 5;
int n, m;
//vector <vector<int>> v;
int parinte[dim], mari[dim];

int find(int x)
{
    if(x== parinte[x])
        return x;
    return find(parinte[x]);
}

void unite(int x, int y)
{
    int p1= find(x);
    int p2= find(y);

    if(mari[p1] < mari[p2])
        swap(p1, p2);
    parinte[p2]= p1;
    mari[p1]+= mari[p2];
}

void citeste()
{
    int ce, x, y, i;
    cin >> n>> m;
    //v.resize(n+ 1);

    for(i= 1;i <= n;i++)
    {
        parinte[i]= i;
        mari[i]= 1;
    }

    for(i= 1;i <= m;i++)
    {
        cin >> ce>> x>> y;
        if(ce== 1)
            unite(x, y);
        else
        {
            //for(int j= 1;j <= n;j++)
            //    cout << parinte[j]<< " "; cout << endl;
            int p1= find(x);
            int p2= find(y);
            if(p1== p2)
                cout <<"DA"<< '\n';
            else
                cout <<"NU"<< '\n';
        }
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    citeste();

    return 0;
}