Cod sursa(job #2861367)

Utilizator DariusGhercaDarius Gherca DariusGherca Data 3 martie 2022 20:57:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int N=1e5+10;
int t[N],nrd[N],n;
int radacina(int x)
{
    if(t[x]==0)
    {
        return x;
    }
    t[x]=radacina(t[x]);
    return t[x];
}
bool verif(int x,int y)
{
    return (radacina(x)==radacina(y));
}
void reuniune(int x,int y)
{
    int rx=radacina(x);
    int ry=radacina(y);
    if(nrd[rx]<nrd[ry])
    {
        t[rx]=ry;
        nrd[ry]+=nrd[rx];
    }
    else
    {
        t[ry]=rx;
        nrd[rx]+=nrd[ry];
    }
}
int main()
{
    int m;
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        t[i]=0;
        nrd[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        f>>x>>y>>z;
        switch(x)
        {
        case 1:
            reuniune(y,z);
            break;
        case 2:
            switch(verif(y,z))
            {
            case 1:
                g<<"DA\n";
                break;
            case 0:
                g<<"NU\n";
                break;
            }
            break;
        }
    }
    return 0;
}