Cod sursa(job #3201727)

Utilizator bexxRebeca N bexx Data 9 februarie 2024 17:45:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#include <vector>
using namespace std;

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

const int N=100005;
int n,m,t[N],r[N];
vector<int>g[N];

int root(int nod)
{
    if(t[nod]==0)
        return nod;
    return root(t[nod]);
}
void reuniune()
{
    int x,y;
    cin>>x>>y;
    int rx=root(x),ry=root(y);
    if(r[x]<r[y])
    {
        r[y]+=r[x];
        g[ry].push_back(rx);
        t[rx]=ry;
    }
    else
    {
        r[x]+=r[y];
        g[rx].push_back(ry);
        t[ry]=rx;
    }
}
void verificare()
{
    int x,y;
    cin>>x>>y;
    int rx=root(x),ry=root(y);
    if(rx==ry)
        cout<<"DA";
    else
        cout<<"NU";
    cout<<'\n';
}
void citire()
{
    cin>>n>>m;
    int op;
    for(int i=0; i<m; i++)
    {
        cin>>op;
        if(op==1)
            reuniune();
        else
            verificare();
    }
}
int main()
{
    citire();
    return 0;
}