Cod sursa(job #1806359)

Utilizator UrsuDanUrsu Dan UrsuDan Data 15 noiembrie 2016 10:39:16
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>

using namespace std;

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

int tata[100010];
int h[100010];

int caut(int x)
{
    int a;
    if(x==tata[x])
        return x;
    else
    {
        a=caut(tata[x]);
        tata[x]=a;
        return a;
    }
}

void unesc (int x,int y)
{
    int a,b;
    a=caut(x);
    b=caut(y);
    if(h[a]>h[b])
        tata[a]=b;
    else
    {
        tata[b]=a;
        h[b]++;
    }
}

int main()
{
    srand(time(0));
    int n,m,x,y,p,i;
    in>>n>>m;
    for(i=1;i<=n;i++)
    {
        tata[i]=i;
        h[i]=1;
    }
    for(i=1;i<=m;i++)
    {
        in>>p>>x>>y;
        if(p==1)
            unesc(x,y);
        else if(caut(x)==caut(y))
            out<<"DA"<<endl;
        else
            out<<"NU"<<endl;
    }
    return 0;
}