Cod sursa(job #3267154)

Utilizator bostanlucastefanBostan Luca-Stefan bostanlucastefan Data 11 ianuarie 2025 10:02:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#define FAST ios_base::sync_with_stdio(false);

using namespace std;

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

const int N=1e5+2;

int n,m,t,x,y,i;
int parent[N],h[N];

int findd(int x)
{
    if(parent[x]==x) return x;
    return parent[x]=findd(parent[x]);
}

void unionn(int x,int y)
{
    x=findd(x);
    y=findd(y);
    if(h[x]<h[y])
        parent[x]=y;
    else if(h[x]>h[y])
        parent[y]=x;
    else
        parent[x]=y, h[y]++;
}

int main()
{
    FAST
    cin>>n>>m;
    for(i=1; i<=n; i++)
        parent[i]=i, h[i]=0;
    while(m--)
    {
        cin>>t>>x>>y;
        switch(t)
        {
            case 1: unionn(x,y); break;
            case 2: if(findd(x)==findd(y))
                        cout<<"DA\n";
                    else
                        cout<<"NU\n";
                    break;
        }
    }
    return 0;
}