Cod sursa(job #1834942)

Utilizator AlexandruRudiAlexandru Rudi AlexandruRudi Data 25 decembrie 2016 22:10:13
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <bits/stdc++.h>

using namespace std;

int n,par[100005],r[100005],m,x,y,z;

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

int Find(int nod){
    if(par[nod]==nod) return nod;
    par[nod]=Find(par[nod]);
    return par[nod];
}

void Unite(int x,int y){
    int rx=Find(x),ry=Find(y);
    if(r[rx]>r[ry]) par[ry]=rx;
    else if(r[rx]<r[ry]) par[rx]=ry;
    else par[rx]=ry,r[ry]++;
}

int main(){
    in >> n >> m;
    for(int i=1;i<=n;i++) par[i]=i;
    for(int i=1;i<=m;i++){
        in >> x >> y >> z;
        if(x==1) Unite(y,z);
        if(x==2){
            if(Find(y)==Find(z)) out << "DA";
            else out << "NU";
        }
    }
}