Cod sursa(job #3141996)

Utilizator vladutzu_finutzuVlad Cacenschi vladutzu_finutzu Data 18 iulie 2023 11:47:38
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n, m;
vector<int> f;
void unite(int x, int y){
    if(!f[x]){
        f[x] = y;
        return;
    }

    unite(f[x], y);
    f[x] = f[f[x]];
}

int supreme_father(int x){
    return (!f[x] ? x : supreme_father(f[x]));
}

int main(){
    cin>>n>>m;
    f.resize(n + 2);
    
    while(m--){
        int tip, x, y;
        cin>>tip>>x>>y;

        if(tip == 1)
            unite(x, y);
        
        else{
            if(supreme_father(x) == supreme_father(y))
                cout<<"DA\n";
            
            else cout<<"NU\n";
        }
    }
    
    return 0;
}