Cod sursa(job #3258813)

Utilizator McMeatGhenea Radu Stefan McMeat Data 23 noiembrie 2024 19:02:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");
//#define f cin
//#define g cout
int n, m, x, y, t[100010], r[100010], c;
int root(int nod)
{
    int start=nod;
    while(t[nod]!=0)
    {
        nod=t[nod];
    }
    int aux=nod;
    while(t[start]!=0)
    {
        aux=t[start];
        t[start]=nod;
        start=aux;
    }
    return nod;
}
void join(int ax, int bx)
{
    //cout<<ax<<bx;
    int a=root(ax);
    int b=root(bx);
    if(ax==bx)
        return;
    if(r[a]>r[b])
    {
        t[b]=a;
    }
    else
    {
        if(r[a]==r[b])
            r[b]++;
        t[a]=b;
    }
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
    {
        r[i]=1;
    }
     for(int i=1;i<=m;i++)
    {
        f>>c>>x>>y;
        if(c==1)
            join(x, y);
        else
        {
            cout<<root(x)<<" "<<root(y)<<endl;
            if(root(x)==root(y))
                g<<"DA"<<endl;
            else
                g<<"NU"<<endl;
        }
    }
    return 0;
}