Cod sursa(job #2569865)

Utilizator PopescuAndreiAlexandruPopescu Andrei Alexandru PopescuAndreiAlexandru Data 4 martie 2020 13:59:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda r3capitusulare Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
#include <cstring>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

const int DIM = 100005;

int t[DIM],rg[DIM],x,y,event,n,m;

int Find(int nod)
{
    while(nod!=t[nod])
        nod=t[nod];
    return nod;
}

void Union(int x, int y)
{
    if(rg[x]<rg[y])
        t[x]=y;
    else if(rg[x]>rg[y])
        t[y]=x;
    else
    {
        t[x]=y;
        rg[y]++;
    }
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        t[i]=i;
        rg[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
        fin>>event>>x>>y;
        int a=Find(x);
        int b=Find(y);
        switch(event)
        {
        case 1:
            {
                if(a!=b)
                    Union(a,b);
                break;
            }
        default:
            {
                if(a==b)
                    fout<<"DA"<<'\n';
                else
                    fout<<"NU"<<'\n';
                break;
            }
        }
    }
}