Cod sursa(job #2421089)

Utilizator ToniBAntonia Biro ToniB Data 14 mai 2019 11:06:34
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");

struct padure
{
    int n;
    vector<int> tat;
    padure(int a): n(a), tat(a)
    {
        for(int i = 0; i < n; ++i)
            tat[i] = i;
    }

    int find_tat(int nod)
    {
        if(tat[nod] == nod)
            return nod;
        else
        {
            int tata = find_tat(tat[nod]);
            tat[nod] = tata;
            return tata;
        }
    }

    void find_r(int x, int y)
    {
        if(find_tat(x) == find_tat(y))
            out << "DA\n";
        else
            out << "NU\n";
    }

    void union_nod(int x, int y)
    {
        tat[y] = find_tat(x);
    }

    void afis()
    {
        for(int i = 0; i < n; ++i)
            cout << tat[i] << ' ';
        cout << endl;
    }

};


int main()
{
    if(!in)
        cout << "eroare";
    int n, m, b, x, y;

    in >> n >> m;
    padure P(n);
    for(int i = 0; i < m; ++i)
    {

        in >> b >> x >> y;
        x--;
        y--;
        if(b == 1)
            P.union_nod(x, y);
        if(b == 2)
            P.find_r(x, y);
        //P.afis();
    }


    in.close();
    out.close();
}