Cod sursa(job #2946158)

Utilizator Eronatedudu zzz Eronate Data 24 noiembrie 2022 17:11:35
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int n,m,sizes[100001], father[100001];

int find_father(int node)
{
    if(father[node]==node)
        return node;
    else
    {
        return father[node] = find_father(father[node]);

    }
}

void reunion(int x, int y)
{
    int fy = find_father(y);
    int fx = find_father(x);
    if(sizes[fx]>sizes[fy])
    {
        father[fy] = fx;
        sizes[fx]+=sizes[fy];
    }
    else
    {
        father[fx] = fy;
        sizes[fy]+=sizes[fx];
    }
}


int main()
{
    int x,y,cod;
    f>>n>>m;
    for(int i=1; i<=n; i++)
    {
        father[i]=i;
        sizes[i]=1;
    }

    for(int i=1; i<=m; i++)
    {
        f>>cod>>x>>y;
        if(cod==1)
            reunion(x,y);
        else
        {
            if(find_father(x)==find_father(y))
                g<<"DA\n";
            else
                g<<"NU\n";
        }

    }
}