Cod sursa(job #2807467)

Utilizator rimihaiMihai Radu-Ioan rimihai Data 23 noiembrie 2021 20:28:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int par[100005], dim[100005];

int find_node(int x)
{
    while(x!=par[x])
        x=par[x];
    return x;
}

void unite(int x,int y)
{
    int find_x=find_node(x);
    int find_y=find_node(y);
    if(dim[find_x]>=dim[find_y])
    {
        par[find_y]=find_x;
        dim[find_x]+=dim[find_y];
    }
    else
    {
        par[find_x]=find_y;
        dim[find_y]+=dim[find_x];
    }
}


void init(int n)
{
    for(int i=1; i<=n; ++i)
    {
        par[i]=i;
        dim[i]=1;
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    int n,m;
    fin>>n>>m;
    init(n);
    for(int i=1; i<=m; i++)
    {
        int optiune, a, b;
        fin>>optiune>>a>>b;
        if(optiune == 1)
        {
            unite(a,b);
        }
        else if(optiune==2)
        {
            if(find_node(a) == find_node(b))
                fout<<"DA";
            else
                fout<<"NU";
            fout<<'\n';
        }
    }
    return 0;
}