Cod sursa(job #3237767)

Utilizator maryyMaria Ciutea maryy Data 12 iulie 2024 21:50:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int nmax=1e5;
int n, m;
int parent[nmax+1], status[nmax+1];
int FindRoot(int node)
{
    if(parent[node]==node)
        return node;
    parent[node]=FindRoot(parent[node]);
    return parent[node];
}
void Union(int node1, int node2)
{
    node1=FindRoot(node1);
    node2=FindRoot(node2);
    if(node1==node2)
        return;
    if(status[node1]<status[node2])
        swap(node1, node2);
    if(status[node1]==status[node2])//au acelasi rang->inaltimea creste cu unu
        status[node1]++;
    parent[node2]=node1;
}
int main()
{
    in>>n>>m;
    for(int i=1; i<=n; i++)
        parent[i]=i;
    for(int i=1; i<=m; i++)
    {
        int cod, x, y;
        in>>cod>>x>>y;
        if(cod==1)
        {
            Union(x, y);
        }
        else
        {
            if(FindRoot(x)==FindRoot(y))
                out<<"DA"<<'\n';
            else
                out<<"NU"<<'\n';
        }
    }
}