Cod sursa(job #3285311)

Utilizator nusuntvictorVictor Stefan nusuntvictor Data 12 martie 2025 18:08:32
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
#define mod 1000000007

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

vector<int>tata(100005),height(100005);

int parinte(int nod,vector<int>tata){
    int cp_node=nod;
    while(nod!=tata[nod])
        nod=tata[nod];


    while(cp_node != nod){
        int tx=tata[cp_node];
        tata[cp_node]=nod;
        cp_node=tx;
    }
    return nod;
}

int main()
{

    int n,op;
    f>>n>>op;
    for(int i=1; i<=n; ++i){
        tata[i]=i;
        height[i]=1;
    }
    for(int i=1; i<=op; ++i){
        int t,x,y;
        f>>t>>x>>y;
        int px=parinte(x,tata);
        int py=parinte(y,tata);
        if(t==1){
            if(height[px]<height[py])
                tata[px]=py;
            else if(height[px]>height[py]) tata[py]=px;
            else{ tata[py]=px;
                height[px]+=1;
            }

        }
        else if(px==py)
            g<<"DA\n";
            else g<<"NU\n";
    }

    return 0;

}