Cod sursa(job #1914575)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 8 martie 2017 17:31:08
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");

const int NMax = 100003;


int x,n,m,y,p,vf1,vf2;
int rang[NMax],root[NMax];

int rad(int x){
    while(x != root[x])
        x = root[x];
    return x;
}
int main()
{
    f >> n >> m;
    for(int i = 1; i <= n; ++i){
        rang[i] = 1;
        root[i] = i;
    }
    for(int i = 1; i <= m; ++i){
        f >> p;
        if(p == 1){
            f >> x >> y;
            vf1 = rad(x);
            vf2 = rad(y);
            if(rang[vf1] > rang[vf2]){
                rang[vf1] += rang[vf2];
                root[vf2] = vf1;
            }else{
                rang[vf2] += rang[vf1];
                root[vf1] = vf2;
            }
        }else{
            f >> x >> y;
            vf1 = rad(x);
            vf2 = rad(y);
            if(vf1 == vf2){
                g << "DA" << '\n';
            }else
                g << "NU" << '\n';
        }
    }
    return 0;
}