Cod sursa(job #2295976)

Utilizator lucianistratiIstrati Lucian lucianistrati Data 4 decembrie 2018 01:54:38
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
    #include <iostream>
    #include <fstream>
    using namespace std;
    int A[100001],B[100001];
    void reuniune(int x, int y)
    {
        if(A[y] == 1)
        {
            B[y]=B[x];
            B[y]=B[y]+A[x];
            return;
        }
        reuniune(x,B[y]);
    }
    int main()
    {
        ifstream fin("disjoint.in");
        ofstream fout("disjoint.out");
        int i,j,N,M,cod,x,y;
        cin>>N>>M;
        for(i=1;i<=N;i++)
        {
            A[i]=i;
            B[i]=1;
        }
        for(i=1;i<=M;i++)
        {
            cin>>cod>>x>>y;
            if(cod==1)
            {
                reuniune(x,y);
            }
            else
            {
                for(j=x;j>=1;j--)
                {
                    if(A[j]!=1)
                    {
                        x=B[x];
                    }
                }
                for(j=y;j>=1;j--)
                {
                    if(A[j]!=1)
                    {
                        y=B[y];
                    }
                }
                if(x==y)
                {
                    cout<<"DA\n";
                }
                else
                {
                    cout<<"NU\n";
                }
            }
        }
        fin.close();
        fout.close();
        return 0;
    }