Cod sursa(job #2753200)

Utilizator ioana0211Ioana Popa ioana0211 Data 21 mai 2021 15:14:20
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n, m, cod, x, y;
int t[100001], height[100001];

int find_tata (int fiu)
{
    while(t[fiu])
        fiu=t[fiu];
    return fiu;
}
void compresie (int fiu, int rad)
{
    while(t[fiu])
    {
        t[fiu]=rad;
        fiu=t[fiu];
    }
}
void reuniune (int x, int y)
{
    int tata_x=find_tata(x), tata_y=find_tata(y);
    if(height[tata_x]<=height[tata_y])
    {
        t[tata_x]=y;
        height[tata_y]+=height[tata_x];
        compresie(x, tata_y);
    } else
    {
        t[tata_y]=x;
        height[tata_x]+=height[tata_y];
        compresie(y, tata_x);
    }
}
int ac_multime (int x, int y)
{
    int tata_x=find_tata(x), tata_y=find_tata(y);
    if(tata_x==tata_y) return 1;
    else return 0;
}
int main()
{
    fin>>n>>m;
    for(int i=0; i<=n; i++) height[i]=1;
    for(int i=1; i<=m; i++)
    {
        fin>>cod>>x>>y;
        if(cod==1) reuniune(x, y);
        else {
            int rasp=ac_multime(x, y);
            if(rasp==1) fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
    return 0;
}