Cod sursa(job #2957440)

Utilizator AffectiveSmile2Mihnea Matea AffectiveSmile2 Data 22 decembrie 2022 16:45:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int NMAX=100000;
int T[NMAX+1],C[NMAX+1];
int radacina(int x)
{
    if(x==T[x])
        return x;
    else
    {
        T[x]=radacina(T[x]);
        return T[x];
    }
}
void leaga(int a , int b)
{
    if(C[b]>C[a])
    {
        T[a]=T[b];
        C[b]=C[a]+C[b];
    }
    else
    {
        T[b]=T[a];
        C[a]=C[b]+C[a];
    }
}

int main()
{
    int N,M,op,x,y,cx,cy;
    f>>N>>M;
    for(int i=1; i<=N; i++)
        T[i]=i,C[i]=1;
    while(M--)
    {
        f>>op>>x>>y;
        ///cout<<op<<' '<<x<<' '<<y<<'\n';
        int r1=radacina(x);
        int r2=radacina(y);
        ///cout<<r1<<' '<<r2<<'\n';
        if(op==1&&r1!=r2)
            leaga(r1,r2);
        else if(op==2)
        {
            if(r1==r2)
                g<<"DA\n";
            else g<<"NU\n";
        }
        ///cout<<op<<' '<<x<<' '<<y<<'\n';
    }
    return 0;

}