Cod sursa(job #3313705)

Utilizator tudorhTudor Horobeanu tudorh Data 5 octombrie 2025 22:22:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#define pb push_back
#define pii pair<int,int>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int parinte[100001],rang[100001];
int find_parent(int nod)
{
    vector<int>v;
    while(parinte[nod])
    {
        v.pb(nod);
        nod=parinte[nod];
    }
    for(int i:v)
        parinte[i]=nod;
    return nod;
}
void unite(int nod1,int nod2)
{
    if(rang[nod1]<rang[nod2])
        parinte[nod1]=nod2;
    else if(rang[nod1]>rang[nod2])
        parinte[nod2]=nod1;
    else
    {
        parinte[nod1]=nod2;
        rang[nod2]++;
    }
}
int main()
{
    int n,m,t,st,dr;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        rang[i]=1;
    }
    while(m--)
    {
        fin>>t>>st>>dr;
        st=find_parent(st);
        dr=find_parent(dr);
        if(t==1)
            unite(st,dr);
        else
        {
            if(st==dr)
                fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
    return 0;
}