Cod sursa(job #2942143)

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

int find(long long x)
{
    while(parent[x]!=x)
        parent[x] = find(parent[x]);
    return parent[x];
}
void reun(int x,int y)
{
    long 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] =rang[x1] + 1;
    }

}
int main() {
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
       // arb[i] = i;
       // rang[i] = i;
        parent[i] = i;
    }
    for(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 (find(x) == find(y))	 {return 0;}
                reun(find(x), find(y));

            }
    }

    return 0;
}