Cod sursa(job #2437868)

Utilizator GabyD002Dobrita Gabriel GabyD002 Data 10 iulie 2019 16:13:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
#define NM 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");

int n,x,y,t[NM],last[NM];

void Read();
void Solve1();
int findRad(int);

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

void Read()
{   f>>n;
    for(int i=1; i<=n; i++) t[i]=last[i]=i;
    int m;
    f>>m;
    while(m--)
    {   int op;
        f>>op>>x>>y;
        if(op==1) Solve1();
            else g<<(findRad(x)==findRad(y) ? "DA\n" : "NU\n");
    }
}

void Solve1()
{   int r1=findRad(x),r2=findRad(y);
    t[r2]=last[r1];
    last[r1]=last[r2];
    t[last[r1]]=t[last[r2]];
}

int findRad(int nod)
{   int k=nod;
    while(k!=t[k]) k=t[k];
    while(nod!=t[nod])
    {   nod=t[nod];
        t[nod]=k;
    }
    return nod;
}