Cod sursa(job #2118590)

Utilizator DeleDelegeanu Alexandru Dele Data 30 ianuarie 2018 19:26:30
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,caz,x,y,i;
int t[100001];
void T(int&x)
{
    if(t[x]!=x)
        T(t[x]);
}
int tata(int x)
{
    int aux=x;
    while(aux!=t[aux])
        aux=t[aux];
    return aux;
}
void af()
{
    int i;
    for(i=1 ; i<=n  ;++i)
        g<<t[i]<<" ";g<<'\n';
}
int main()
{
    f>>n>>m;
    for(i=1 ; i<=n ; ++i)
        t[i]=i;
    for(i=1 ; i<=m ; ++i)
    {
        //af();
        f>>caz>>x>>y;
        if(caz==1)
        {
             x=tata(x);
             y=tata(y);
             t[y]=x;
        }
        else
        {
            x=tata(x);
            y=tata(y);
            //g<<x<<" "<<y<<'\n';g<<'\n';
            if(x==y)
              g<<"DA"<<'\n';
            else
              g<<"NU"<<'\n';
        }
    }

    return 0;
}