Cod sursa(job #2736415)

Utilizator foodinatorfoodinator foodinator Data 3 aprilie 2021 14:19:29
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,m,i,t[100005],c,a,b,t1,t2,r[100005];
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int tata(int x)
{
    if (t[x]==x) return x;
    else tata(t[x]);
}
void uniform(int a, int t1)
{
    if (t[a]==t1) return;
    else
    {
        t[a]=t1;
        uniform(t[a],t1);
    }
}
void unire(int t1, int t2)
{
    if (r[t1]>r[t2])
        t[t2]=t1;
    else t[t1]=t[t2];
    if (r[t1]==r[t2]) r[t2]++;
}
int main()
{
    in>>n>>m;
    for (i=1;i<=n;i++)
        t[i]=i;
    for (i=1;i<=m;i++)
    {
        in>>c;
        if (c==1)
        {
            in>>a>>b;
            t1=tata(a);
            uniform(a,t1);
            t2=tata(b);
            uniform(b,t2);
            unire(t1,t2);
        }
        else
        {
            in>>a>>b;
            t1=tata(a);
            t2=tata(b);
            uniform(a,t1);
            uniform(b,t2);
            if (t1==t2) out<<"DA"<<endl;
            else out<<"NU"<<endl;
        }
    }
}