Cod sursa(job #3360200)

Utilizator mmateiMatei Barbu mmatei Data 10 iulie 2026 12:48:12
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <vector>

using namespace std;

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

int n,m,k,x,y;

struct forest{
    vector<int> parent;
    forest(int n){
        parent.resize(n+1);
    }
    int rad(int a){
        if(parent[a]==0){
            return a;
        }
        parent[a]=rad(parent[a]);
        return parent[a];
    }
    void join(int a,int b){
        a=rad(a);
        b=rad(b);
        if(a!=b)parent[a]=b;
    }
    bool qu(int a, int b){
        return rad(a)==rad(b);
    }
};

int main()
{
    fin>>n>>m;
    forest disjoint(n);
    for(int i=1;i<=m;i++){
        fin>>k>>x>>y;
        if(k==1){
            disjoint.join(x,y);
        }else if(disjoint.qu(x,y)){
            fout<<"DA\n";
        }else fout<<"NU\n";
    }
    return 0;
}