Cod sursa(job #2521595)

Utilizator ViAlexVisan Alexandru ViAlex Data 11 ianuarie 2020 10:56:25
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include<bits/stdc++.h>
using namespace std;



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

int n,query;



void read()
{
    in>>n>>query;
}

struct node
{
    node*parent;

    node():parent(nullptr)
    {

    }


    node*get_global_parent()
    {
        node*here=this;
        while(here->parent!=nullptr)
        {
            here=here->parent;
        }
        return here;
    }
};

node node_list[100000];



void merge_trees(node*a,node*b)
{
    b->parent=a;
}

bool same_parent(node*a,node*b)
{
    return a->get_global_parent()==b->get_global_parent();
}

void _query(int query_type,int a,int b)
{
    switch(query_type)
    {
    case 1:
        merge_trees(&node_list[a],&node_list[b]);
        break;

    case 2:
        if(same_parent(&node_list[a],&node_list[b]))
            out<<"DA"<<'\n';
        else out<<"NU"<<'\n';
    }
}



void solve()
{
    int a,b,c;
    for(int i=0; i<query; i++)
    {
        in>>a>>b>>c;
        _query(a,b-1,c-1);
    }


}

int main()
{
    read();
    merge_trees(&node_list[0],&node_list[1]);
    solve();
}