Cod sursa(job #2617647)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 22 mai 2020 15:29:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int sz[100001],par[100001],n,m,aux;
void op1(int x, int y)
{
    int x2 = x;
    while(x2 != par[x2])
        x2 = par[x2];
    int y2 = y;
    while(y2 != par[y2])
        y2 = par[y2];
    if(sz[x2] < sz[y2])
    {
        swap(x,y);
        swap(x2,y2);
    }
    sz[x2] += sz[y2];
    par[y2] = x2;
    while(x!=x2)
    {
        aux = par[x];
        par[x]=x2;
        x=aux;
    }
    while(y!=x2)
    {
        aux = par[y];
        par[y]=x2;
        y=aux;
    }

}
void op2(int x, int y)
{
    int x2=x;
    while(x2 != par[x2])
        x2 = par[x2];
    int y2 = y;
    while(y2 != par[y2])
        y2 = par[y2];
    while(x!=x2)
    {
        int aux = par[x];
        par[x]=x2;
        x=aux;
    }
    while(y!=y2)
    {
        aux = par[y];
        par[y]=y2;
        y=aux;
    }
    if(x2==y2)
        g<<"DA"<<"\n";
    else
        g<<"NU"<<"\n";
}
int main()
{
    f>>n>>m;
    int op;
    int x,y;
    for(int i=1;i<=n;i++)
    {
        sz[i]=1;
        par[i]=i;
    }
    for(int i=1;i<=m;i++)
    {
        f>>op>>x>>y;
        if(op==1)
        {
            op1(x,y);
        }
        else
        {
            op2(x,y);
        }
    }
}