Cod sursa(job #1844950)

Utilizator Fanika123Tanasa Stefan Fanika123 Data 10 ianuarie 2017 17:51:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n,m,t[100005],op,x,y;

void Unif(int x, int y)
{
    t[x]=y;
}

int Cauta(int x)
{
    int r,y;

    r=x;
    while(t[r]!=0)
        r=t[r];

    /// comprimarea drumului
    while(x!=r)
    {
        y=t[x];
        t[x]=r;
        x=y;
    }
    return r;
}

int main()
{


    fin>>n>>m;

    while(m--)
    {
        fin>>op>>x>>y;
        x=Cauta(x); y=Cauta(y);
        if (op==1)
        {
            if (x!=y) Unif(x,y);
        }
        else
        {
            if (x!=y) fout<<"NU\n";
            else fout<<"DA\n";
        }
    }

    fin.close();
    fout.close();
    return 0;
}