Cod sursa(job #2423387)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 21 mai 2019 11:59:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
#define MAX (int)(1e5+5)
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n,m,A[MAX],Grad[MAX];
vector<int> M[MAX];
//A[i]=x, nodul i apartine multimii x

void unite(int,int);

int main(){
    int i,task,x,y;
    fin>>n>>m;
    for(i=1;i<=n;++i){
        M[i].push_back(i);
        Grad[i]=1;
        A[i]=i;
    }
    while(m--){
        fin>>task>>x>>y;
        if(task==1){
            if(Grad[A[x]]>Grad[A[y]])
                unite(A[x],A[y]);
            else
                unite(A[y],A[x]);
        }else{
            if(A[x]==A[y])
                fout<<"DA\n";
            else
                fout<<"NU\n";
        }
    }
    return 0;
}
void unite(int x,int y){
    /// x <- y
    int i;
    Grad[x]+=Grad[y];
    for(i=0;i<Grad[y];++i){
        M[x].push_back(M[y][i]);
        A[M[y][i]]=x;
    }
    M[y].clear();
}