Cod sursa(job #3277606)

Utilizator tudorhTudor Horobeanu tudorh Data 16 februarie 2025 20:58:38
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int mult[100001];
int rang[100001];
int findmult(int a)
{
    int cpy=a;
    while(mult[a]!=a)
        a=mult[a];
    while(mult[cpy]!=cpy)
    {
        mult[cpy]=a;
        cpy=mult[cpy];
    }
    return a;
}
void reuniune(int a,int b)
{
    int A=findmult(a),B=findmult(b);
    if(rang[A]>rang[B])
        mult[B]=A;
    else mult[A]=B;
    if(rang[A]==rang[B])
        rang[A]++;

}
int main()
{
    int n,m,t,st,dr;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        mult[i]=i;
        rang[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
        fin>>t>>st>>dr;
        if(t==1)
        {
            if(findmult(st)!=findmult(dr))
                reuniune(st,dr);
        }
        else
        {
            if(findmult(st)==findmult(dr))
                fout<<"DA\n";
            else fout<<"NU\n";
        }
    }

    return 0;
}