Cod sursa(job #2545119)

Utilizator Daria09Florea Daria Daria09 Data 12 februarie 2020 20:44:03
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
#define dim 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int daddy[dim],rnk[dim];
int n,m;
int GetRoot(int node)
{
    if(daddy[node]!=node)
        return GetRoot(daddy[node]);
    return node;
}
void Unite(int node1,int node2)
{
    int dad1=GetRoot(node1),dad2=GetRoot(node2);
    if(rnk[dad1]==rnk[dad2])
    {
        rnk[dad1]++;
        daddy[dad2]=dad1;
    }
    else if(rnk[dad1]>rnk[dad2])
        daddy[dad1]=dad2;
    else
        daddy[dad2]=dad1;
}
void Solve()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
        daddy[i]=i;
    for(int i=1;i<=m;++i)
    {
        int type,x,y;
        f>>type>>x>>y;
        if(type==1)
            Unite(x,y);
        else
            if(GetRoot(x)==GetRoot(y))
            g<<"DA\n";
        else
            g<<"NU\n";
    }
}
int main()
{
    Solve();
    return 0;
}