Cod sursa(job #2075142)

Utilizator nicholascantarNicholas David Cantar Gogitidze nicholascantar Data 25 noiembrie 2017 11:30:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>

using namespace std;
int t[100010],h[100010],n,m,i,op,el1,el2;
int findd (int x)
{
    int r=x;
    while(t[r]) r=t[r];
    int y=x;
    while(y!=r)
    {
        int t1=t[y];
        t[y]=r;
        y=t1;
    }
    return r;
}
void unionn (int x, int y)
{
    int r1,r2,c;
    r1=findd(x);
    r2=findd(y);
    if(h[r1]>h[r2])
    {
        t[r2]=r1;
        c=r1;
    }
    else
    {
        t[r1]=r2;
        c=r2;
    }
    if(h[r1]==h[r2]) c++;
}
int main()
{
    ifstream fin ("disjoint.in");
    ofstream fout ("disjoint.out");
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        h[i]=1;
        t[i]=0;
    }
    for(i=1;i<=m;i++)
    {
        fin>>op>>el1>>el2;
        if(op==1) unionn(el1,el2);
        else
        {
            if(findd(el1)==findd(el2)) fout<<"DA"<<'\n';
            else fout<<"NU"<<'\n';
        }
    }
    return 0;
}