Cod sursa(job #3311362)

Utilizator RosaSofianRosa Sofian RosaSofian Data 21 septembrie 2025 14:56:37
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <vector>
using namespace std;
//typedef unsigned long long ll;

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

const int dim= 1e5+ 5;
vector <int> parent;
int sizes[dim];

int n, m;

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

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

    if(p1!= p2)
        parent[p2]= p1;
    sizes[p1]+= sizes[p2];
}

void citim()
{
    int x, y, i, ce;
    cin >> n>> m;
    parent.resize(n+ 1);

    for(i= 1;i <= n;i++)
        parent[i]= i, sizes[i]= 1;

    for(i= 1;i <= m;i++)
    {
        cin >> ce>> x>> y;

        if(ce== 2)
        {
            if(find(x)== find(y))
                cout << "DA"<< '\n';
            else
                cout << "NU"<< '\n';
        }
        else
        {
            if(sizes[x] > sizes[y])
                unite(x, y);
            else
                unite(y, x);
        }
    }
}

int main()
{
    int n, m;
    citim();

    return 0;
}