Cod sursa(job #3293446)

Utilizator tudorhTudor Horobeanu tudorh Data 11 aprilie 2025 18:07:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int parent[100001],rang[100001];
int findparent(int n)
{
    vector<int>b;
    while(parent[n]!=n)
    {
        b.push_back(n);
        n=parent[n];
    }
    for(int i=0;i<b.size();i++)
        parent[b[i]]=n;
    return n;
}
void unire(int a,int b)
{
    int parintea=findparent(a),parinteb=findparent(b);
    if(parintea==parinteb)
        return;
    if(rang[parintea]<rang[parinteb])
    {

    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr),cout.tie(nullptr);
    int n,m,t,x,y;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        parent[i]=i;
        rang[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
        fin>>t>>x>>y;
        if(t==1)
        {
            int parintex=findparent(x),parintey=findparent(y);
            if(rang[parintex]>rang[parintey])
                parent[parintex]=parintey;
            else if(rang[parintex]<rang[parintey])
                parent[parintey]=parintex;
            else
            {
                parent[parintex]=parintey;
                rang[parintey]++;
            }
        }
        else
        {
            bool r=(findparent(x)==findparent(y));
            if(r==1)
                fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
    return 0;
}