Cod sursa(job #2942147)

Utilizator RosianuRobertRosianu Robert RosianuRobert Data 19 noiembrie 2022 01:33:46
Problema Paduri de multimi disjuncte Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,parent[100001],rang[100001],cod,x,y,i,j;

int find(int x)
{
    if(parent[x]!=x)
        parent[x] = find(parent[x]);
    return parent[x];
}
void reun(int x,int y)
{
    int x1,y1;
    x1 = find(x);
    y1 = find(y);
    if (x1 == y1)
        return;
    if(rang[x1] < rang[y1])
        parent[x1] = y1;
    else if(rang[y1] < rang [x1]) {
            parent[y1] = x1;
        }
    else
    {
        parent[y1] = x1;
        rang[x1] ++;
    }

}
int main() {
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
       // arb[i] = i;
       // rang[i] = i;
        parent[i] = i;
    }
    for(int i=1;i<=m;i++){
        f>>cod>>x>>y;
        if(cod == 2) {
            if (find(x) == find(y)) {
                g << "DA" << endl;
            } else
                g << "NU" << endl;
        }
            else if(cod == 1)
            {
                reun(x, y);
            }
    }

    return 0;
}