Cod sursa(job #2853480)

Utilizator m1i2h3a4i5Popescu Adrian Mihai m1i2h3a4i5 Data 20 februarie 2022 12:34:03
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,x,y,tip,i,sef[100002],x1,y1,nrc[100002];
int main ()
{
    fin>>n>>m;
    for(i=1;i<=n;i++){
        sef[i]=i;
        nrc[i]=1;
    }
    for(i=1;i<=m;i++){
        fin>>tip>>x>>y;
        x1=x;
        while(x1!=sef[x1]){
            x1=sef[x1];
        }
        ///x1 este seful grupului din care x face parte
        y1=y;
        while(y1!=sef[y1]){
            y1=sef[y1];
        }
        ///y1 este seful grupului din care y face parte
        if(tip==1){
            ///se face unificare

            if(nrc[x1]<nrc[y1]){
                nrc[y1]+=nrc[x1];
                sef[x1]=y1;
            }
            else{
                nrc[x1]+=nrc[y1];
                sef[y1]=x1;
            }
        }
        else{
            if(x1==y1) fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
    fin.close();
    fout.close();
    return 0;
}