Cod sursa(job #2794256)

Utilizator GligarEsterabadeyan Hadi Gligar Data 4 noiembrie 2021 16:12:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int nmax=100000;

vector <int> r[nmax+1];

int v[nmax+1];

int main(){
    int n,m;
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        r[i].push_back(i);
        v[i]=i;
    }
    for(int im=1;im<=m;im++){
        int x,a,b;
        fin>>x>>a>>b;
        if(x==1){
            int s1=r[v[a]].size(),s2=r[v[b]].size();
            int va=v[a],vb=v[b];
            if(s1<=s2){
                for(int i=0;i<s1;i++){
                    r[vb].push_back(r[va][i]);
                    v[r[va][i]]=vb;
                }
            }else{
                for(int i=0;i<s2;i++){
                    r[va].push_back(r[vb][i]);
                    v[r[vb][i]]=va;
                }
            }
        }else{
            if(v[a]==v[b]){
                fout<<"DA\n";
            }else{
                fout<<"NU\n";
            }
        }
    }
    return 0;
}