Cod sursa(job #2507195)

Utilizator Vladymyr11Pechi Vladimir Stefan Vladymyr11 Data 9 decembrie 2019 19:28:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>

using namespace std;
int t[100001],niv[100001];
int f(int x)
    {
    int y=x,i;
    while (t[y])
        y=t[y];
    while(t[x])
        {
        i=t[x];
        t[x]=y;
        x=i;
        }
    return y;
    }

void u(int x, int y)
    {
    int r1=f(x);
    int r2=f(y);
    if (r1!=r2)
        {
        if (niv[r1]==niv[r2])
            {
            t[r1]=r2;
            niv[r2]++;
            }
        else if (niv[r1]>niv[r2])
            t[r2]=r1;
        else
            t[r1]=r2;
        }
    }
int main()
{
    ifstream fin ("disjoint.in");
    ofstream fout ("disjoint.out");
    int n,m,p,x,y;
    fin>>n>>m;
    for (int i=1;i<=m;i++)
        {
        fin>>p>>x>>y;
        if (p==2)
            if (f(x)==f(y))
                fout<<"DA\n";
            else
                fout<<"NU\n";
        else u(x,y);
        }
    return 0;
}