Cod sursa(job #3191472)

Utilizator stefanvilcescuStefan Vilcescu stefanvilcescu Data 9 ianuarie 2024 19:21:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;
const int MAXN=1e5;

class DSU{
    public:
        int rank[MAXN+1], parinte[MAXN+1];
        void set(){
            for(int i=1; i<=MAXN; i++){
                parinte[i]=i;
                rank[i]=1;
            }
        }
        int findRoot(int x){
            if(parinte[x]!=x)
                parinte[x]=findRoot(parinte[x]);
            return parinte[x];
        }
        void unite(int x, int y){
            x=findRoot(x);
            y=findRoot(y);
            if(rank[x]<rank[y])
                swap(x, y);
            parinte[y]=x;
            rank[x]+=rank[y];
        }
};

DSU dsu;

int main()
{
    ifstream cin("disjoint.in");
    ofstream cout("disjoint.out");
    int n, q, i, tip, x, y;
    cin>>n>>q;
    dsu.set();
    for(i=0; i<q; i++){
        cin>>tip>>x>>y;
        if(tip==1)
            dsu.unite(x, y);
        else
            if(dsu.findRoot(x)==dsu.findRoot(y))
                cout<<"DA\n";
            else
                cout<<"NU\n";
    }
    return 0;
}