Cod sursa(job #2335496)

Utilizator david.sachelarieDavid Sachelarie david.sachelarie Data 4 februarie 2019 10:48:30
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>

using namespace std;

int father[100001];
int temp[100001];

int main()
{
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");

    int n,m;
    fin>>n>>m;


    int p,a,b;
    int i,j;
    for(i=0;i<m;i++){
        fin>>p>>a>>b;
        if(p==1){
            if(father[a]==0 && father[b]==0){
                father[b]=a;
            }
            else{
                while(father[a]!=0)
                    a=father[a];

                while(father[b]!=0)
                    b=father[b];

                father[b]=a;
            }
        }
        else{
            j=0;
            while(father[a]!=0){
                temp[j]=a;
                a=father[a];
                j++;
            }
            j--;
            while(j>=0){
                father[temp[j]]=a;
                j--;
            }

            j=0;
            while(father[b]!=0){
                temp[j]=b;
                b=father[b];
                j++;
            }
            j--;
            while(j>=0){
                father[temp[j]]=b;
                j--;
            }

            if(a==b) fout<<"DA"<<endl;
            else fout<<"NU"<<endl;
        }
    }
    fin.close();
    fout.close();
    return 0;
}