Cod sursa(job #2144324)

Utilizator JiyuuNoTsubasaMaria Guran JiyuuNoTsubasa Data 26 februarie 2018 18:01:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int tata[100005],niv[100005],n,m,t1,t2;
int find (int x)
{
    int a=x,r=x;
    while (tata[r])
        r=tata[r];
    while (tata[a])
    {
        int z=tata[a];
        tata[a]=r;
        a=z;
    }
    return r;
}
void unite (int a,int b)
{
    if (a!=b)
    {
        if (niv[a]<niv[b])
            tata[a]=b;
        else if (niv[b]<niv[a])
            tata[b]=a;
        else
        {
            tata[b]=a;
            niv[a]++;
        }
    }
}
int main()
{
    int x,y,q;
    in>>n>>m;
    for (int i=1; i<=m; i++)
    {
        in>>q>>x>>y;
        t1=find(x);
        t2=find(y);
        if (q==1)
        {
            if(t1!=t2)
                unite(t1,t2);
        }
        else
        {
            if(t1!=t2) out<<"NU"<<'\n';
            else out<<"DA"<<'\n';
        }
    }
    return 0;
}