Cod sursa(job #2867109)

Utilizator pimao2004Lupu Stefan Dragos pimao2004 Data 10 martie 2022 10:53:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>

using namespace std;
ifstream in ("disjoint.in");
ofstream out ("disjoint.out");
int t[200001];
int grad[200001];
int rad(int x)
{
    if(t[x]==0)
        return x;
    t[x]=rad(t[x]);
    return t[x];
}
void reuniune(int x,int y)
{
    int rx=rad(x),ry=rad(y);
    if(grad[x]<grad[y])
    {
        grad[ry]+=grad[rx];
        t[rx]=ry;
    }
    else
    {
        grad[rx]+=grad[ry];
        t[ry]=rx;
    }
}
int main()
{
    int n,m;
    in>>n>>m;
    int t,x,y;
    for(int i=1;i<=n;i++)
        grad[i]=1;
    for(int i=1;i<=m;i++)
    {
        in>>t>>x>>y;
        if(t==1)
        {
            reuniune(x,y);
        }
        else
        {
            if(rad(x)==rad(y))
                out<<"DA";
            else out<<"NU";
            out<<'\n';
        }
    }
    return 0;
}