Cod sursa(job #2870277)

Utilizator toda.emanuelatoda emanuela toda.emanuela Data 12 martie 2022 11:24:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int t[100001],rang[100001],n,m,z;

void unire(int x,int y)
{
    if(rang[x]<rang[y])
        t[y]=t[x];
    else
    {
        t[x]=t[y];
        if(rang[x]==rang[y])
            rang[x]++;
    }
}

int multime(int nod)
{
    if(t[nod]!=nod)
        t[nod]=multime(t[nod]);
    return t[nod];
}
int main()
{
    f>>n>>m;
    int i,cerinta,x,y,tatay,tatax;
    for(i=1;i<=n;i++)
        t[i]=i;

    for(i=1;i<=m;i++)
    {
        f>>cerinta>>x>>y;
        tatax=multime(x);
        tatay=multime(y);
        if(cerinta==1)
        {
            if(tatax!=tatay)
                unire(tatax,tatay);
        }
        else
        {
            if(tatax!=tatay)
                g<<"NU"<<'\n';
            else
                g<<"DA"<<'\n';
        }
    }
    return 0;
}