Cod sursa(job #2285107)

Utilizator cc4infinityCojocaru Catalin cc4infinity Data 18 noiembrie 2018 10:08:05
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.64 kb
#include <bits/stdc++.h>

using namespace std;

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

int p[100004],r[100004],i,j,m,n,x,y;

int tata(int x)
{
    if (!p[x]) return x;
    return tata(p[x]);
}

void uneste(int a,int b)
{
    int x=tata(a);
    int y=tata(b);
    if (x==y) return;
    if (r[x]>r[y]) p[y]=x;
    if (r[x]<r[y]) p[x]=y;
    if (r[x]==r[y]) {p[y]=x; r[x]++;}
}

int main()
{
    fin>>n>>m;
    for (i=1;i<=m;i++)
    {
        fin>>j>>x>>y;
        if (j==1)
        uneste(x,y);
        else
          if (tata(x)==tata(y)) fout<<"DA\n"; else fout<<"NU\n";
    }
    return 0;
}