Cod sursa(job #3365749)

Utilizator Maya_PopaPopa Maya Diana Maya_Popa Data 23 septembrie 2026 18:41:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
vector<int> parent;
vector<int> rnk;
int Find(int x) {
    if (x==parent[x]) {
        return x;
    }
    return parent[x]=Find(parent[x]);
}
void Union(int a, int b) {
    a=Find(a);
    b=Find(b);
    if (a!=b) {
        if (rnk[a]<rnk[b]) {
            swap(a, b);
        }
        parent[b]=a;
        if (rnk[a]==rnk[b])
            rnk[a]++;
    }
}
int main() {
    int n,m,i,cer,x,y;
    fin>>n>>m;
    parent.resize(n+1);
    rnk.resize(n+1, 0);
    for (i=1; i<=n; i++) {
        parent[i] = i;
    }
    for (i=0; i<m; i++) {
        fin>>cer>>x>>y;
        if (cer==1) {
            Union(x, y);
        } else if (cer==2) {
            if (Find(x)==Find(y)) {
                fout<<"DA"<<endl;
            } else {
                fout<<"NU"<<endl;
            }
        }
    }
    return 0;
}