Cod sursa(job #2966181)

Utilizator cristina.damov@s.unibuc.roCristina [email protected] Data 16 ianuarie 2023 20:17:33
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream>
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m;
int gr[100000], t[100000];

int op2(int x)
{
    int v=x,y;
    while(t[v]!=v) v=t[v];
    y=x;
    while(t[y]!=v)
    {
        y=t[x];
        t[x]=v;
        x=y;
    }
    return v;
}

void op1(int x, int y)
{
    int v1,v2;
    v1=op2(x);
    v2=op2(y);

    if(gr[v1]<gr[v2]) t[v2]=v1;
    else t[v1]=v2;

    if(gr[v1]==gr[v2]) gr[v1]++;
}

void disjoint()
{
    int cod,x,y,i;
    f>>n>>m;
    for(i=1; i<=n; i++)
    {
        gr[i]=1;
        t[i]=i;
    }
    for(i=0;i<m;i++)
    {
        f>>cod>>x>>y;
        if(cod==1)
            op1(x,y);
        else
        {
            if(op2(x)==op2(y))  g<<"DA\n";
            else g<<"NU\n";
        }
    }
    f.close();
    g.close();
}

int main()
{
    disjoint();
    return 0;
}