Cod sursa(job #2631970)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 1 iulie 2020 18:40:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int Dim=100001;
int N,M,T[Dim],h[Dim];

int Find(int x)//Regula de condensare
{
    int r=x;
    while(T[r]) r=T[r];

    int y=x;
    while(y!=r)
    {
        int t=T[y];
        T[y]=r;
        y=t;
    }
    return r;
}

void Union_ponderare(int x,int y)
{
    int rx=Find(x),ry=Find(y);
    if(h[rx]>h[ry]) T[ry]=rx;
    else
    {
        T[rx]=ry;
        if(h[rx]==h[ry]) h[ry]++;
    }
}

int main()
{
    f>>N>>M;
    int x,y,z;
    for(int i=1;i<=M;i++)
    {
        f>>x>>y>>z;
        if(x==1) Union_ponderare(y,z);
        else
        {
            int rx=Find(y),ry=Find(z);
            if(rx==ry) g<<"DA";
            else g<<"NU";
            g<<'\n';
        }
    }

    return 0;
}