Cod sursa(job #2737205)

Utilizator Cojocaru_Andrei_CristianCojocaru Andrei Cristian Cojocaru_Andrei_Cristian Data 4 aprilie 2021 15:31:27
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;

int tata[100005],cnt[100005];

int find(int nod)
{
    while(nod!=tata[nod])
    {
        nod=tata[nod];
    }
    return nod;
}
void update(int nod1,int nod2)
{
    if(cnt[nod1]==cnt[nod2])
    {
        cnt[nod2]++;
    }
    if(cnt[nod1]<cnt[nod2])
         tata[find(nod1)]=tata[find(nod2)];
    else
         tata[find(nod2)]=tata[find(nod1)];

}
bool querry(int nod1,int nod2)
{
    if(find(nod1)==find(nod2))
       return 1;
    return 0;
}
int main()
{
    ifstream cin("disjoint.in");
    ofstream cout("disjoint.out");
    int n,m,t,x,y;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        tata[i]=i;
        cnt[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
        cin>>t>>x>>y;
        if(t==1)
            update(x,y);
        else
        {
            if(querry(x,y)==1)
            {
                cout<<"DA\n";
            }
            else
            {
                cout<<"NU\n";
            }
        }
    }
    return 0;
}