Cod sursa(job #3004777)

Utilizator DevilonnetPescar Denis Devilonnet Data 16 martie 2023 16:33:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<vector>
#include<algorithm>

using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

int n,m,C[100001],cerinta;

int find(int nod)
{
    if(C[nod]==nod)
        return nod;
    return C[nod]=find(C[nod]);
}

void unesc(int nod1, int nod2)
{
    if(C[nod1]<C[nod2])
        C[nod2]=C[nod1];    
    else
        C[nod1]=C[nod2];
}

int main()
{
    cin>>n>>m;
    for(int i=1; i<=n; ++i)
        C[i]=i;
    for(int i=1,x,y;i<=m;++i)
        {
            cin>>cerinta>>x>>y;
            int rad1=find(x); ///kruskal
            int rad2=find(y);
            if(cerinta==1)
            {
                if(rad1!=rad2)
                unesc(rad1,rad2);
            }
            else
            if(cerinta==2)
            {
                if(rad1==rad2)
                    cout<<"DA"<<'\n';
                else  
                    cout<<"NU"<<'\n';
            }
        }
    return 0;
}