Cod sursa(job #2531555)

Utilizator bogdan_modoleaBogdan Modolea bogdan_modolea Data 26 ianuarie 2020 14:03:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
#define NMAX 100001

using namespace std;
typedef long long ll;

string file="disjoint";

ifstream fin(file+".in");
ofstream fout(file+".out");


int n,m,op;
int dad[NMAX],h[NMAX];

struct muchie{
int x,y;
}muchie[NMAX];


int rad(int x)
{
    if(dad[x]) return rad(dad[x]);
    return x;

}

void unificare(int x,int y)
{
    if(h[x]==h[y]){
        dad[x]=y;
        h[y]++;
    }
    else if(h[x]<h[y])
        dad[x]=y;
    else
        dad[y]=x;
}

int main()
{
    int i;
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>op>>muchie[i].x>>muchie[i].y;
        if(op==1){
            int r1=rad(muchie[i].x);
            int r2=rad(muchie[i].y);
            if(r1!=r2){
                unificare(r1,r2);
            }
        }
        else{
            if(rad(muchie[i].x)==rad(muchie[i].y)) fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
    return 0;
}